2011-06-20 34 views
-5

私のJavaプログラムをnetbeansで実行しようとしましたが、このエラーが発生しました。Javaプログラムを実行中にエラーが発生しました

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(ImageIcon.java:181) 
    at MainForm.addComponentsToPane(MainForm.java:28) 
    at MainForm.createAndShowGUI(MainForm.java:112) 
    at MainForm.access$000(MainForm.java:15) 
    at MainForm$4.run(MainForm.java:125) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641) 
    at java.awt.EventQueue.access$000(EventQueue.java:84) 
    at java.awt.EventQueue$1.run(EventQueue.java:602) 
    at java.awt.EventQueue$1.run(EventQueue.java:600) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:611) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

これはコードです:

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 




public class MainForm { 

    public static void addComponentsToPane(final JFrame frame, Container pane) { 
     Color colorGreen = new Color(0, 100, 0); 
     Color colorBrown = new Color(150, 100, 0); 
     //Color colorBlue = new Color (0, 0, 150); 
     //Font font = new Font("Verdana", Font.BOLD, 12); 

     pane.setLayout(null); 
     pane.setBackground(new Color (255, 255, 170)); 

     //add image and necessary labels on top left corner 
     //SHA Image and label 
     ImageIcon image = new ImageIcon(MainForm.class.getResource("SHA_logo.gif"));  
     JLabel label = new JLabel("Office of Traffic & Safety", image, JLabel.LEFT); 
     label.setVerticalTextPosition(JLabel.BOTTOM); 
     label.setHorizontalTextPosition(JLabel.CENTER); 
     label.setFont(new Font("Times New Roman", Font.PLAIN, 11)); 
     pane.add(label); 
     label.setBounds(50, 10, 130, 100); 
     label.setBorder(null); 

     //university of maryland image and label\\\ 
     image = new ImageIcon(MainForm.class.getResource("maryland_flag_round.gif")); 
     label = new JLabel("Univ. of Maryland", image, JLabel.LEFT); 
     label.setVerticalTextPosition(JLabel.BOTTOM); 
     label.setHorizontalTextPosition(JLabel.CENTER); 
     label.setFont(new Font("Times New Roman", Font.PLAIN, 11)); 
     pane.add(label); 
     label.setBounds(190, 10, 130, 90);  
     label.setBorder(null); 

     //critical lane label 
     label = new JLabel("Critical Lane Volume"); 
     label.setFont(new Font("Arial Narrow", Font.BOLD, 30)); 
     label.setForeground(colorGreen); 
     pane.add(label); 
     label.setBounds(50, 90, 250, 50); 
     label.setBorder(null); 

     label = new JLabel("<html>Please choose the analysis type:</html>"); 
     label.setFont(new Font("Arial", Font.BOLD, 18)); 
     label.setForeground(colorBrown); 
     pane.add(label); 
     label.setBounds(25, 130, 300, 70); 
     label.setBorder(null); 

     //back and exit buttons 
     JButton button1 = new JButton("Interchange"); 
     JButton button2 = new JButton ("Intersection"); 
     JButton button3 = new JButton ("Exit"); 
     pane.add(button1); 
     pane.add(button2); 
     pane.add(button3); 
     button1.setBounds(75, 200, 200, 50); 
     button2.setBounds(75, 270, 200, 50); 
     button3.setBounds(75, 340, 200, 50); 

     //add attap label at bottom left 
     image = new ImageIcon(MainForm.class.getResource("attap_logo.gif"));  
     label = new JLabel(image); 
     pane.add(label); 
     label.setBounds(30, 380, 270, 90);  
     label.setBorder(null); 

     button1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       frame.setVisible(false); 
       frame.dispose(); 
       InterchangeLoad.main(null); 
      } 
     }); 

     button2.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       frame.setVisible(false); 
       frame.dispose(); 
       MultipleIntersectionLoad.main(null); 
      } 
     }); 

     button3.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       frame.setVisible(false); 
       frame.dispose(); 
      } 
     }); 

    } 


    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("Critical Lane Volume"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Set up the content pane. 
     addComponentsToPane(frame, frame.getContentPane()); 

     frame.setSize(350, 500); 
     frame.setResizable(false); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 

     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 

    } 

} 
+3

コードを投稿できますか? – insumity

答えて

5

それは1つ(またはそれ以上)のように見えるあなたのイメージアイコンのコンストラクタに渡す引数のはnullです。

EDIT

例外は、これら2つの行のいずれかで発生している。いずれの場合も

ImageIcon image = new ImageIcon(MainForm.class.getResource("SHA_logo.gif"));  

又は

image = new ImageIcon(MainForm.class.getResource("maryland_flag_round.gif")); 

、問題は同じである:リソースがされていません見つかったので、nullがgetResource()によって返されています。なぜちょうどnew ImageIcon(String filename)を使用していないのですか?私はgetResource()がやっていることを100%確信していません。あなたのコードの

他のいくつかの迅速なコメント(提案):

pane.setLayout(null);は、私はあなたがちょうどそのようLayoutManagerのを取り除くことができさえわからないんだけど、良いアイデアではありません。

異なるオブジェクトに対して同じ参照(imageおよびlabel)を複数回繰り返し使用すると、コーディングスタイルが悪くなります。あなたはこれを行うことでメモリを節約しているわけではなく、コードはあまり意味がありません。

もっとわかりやすい名前を使用してください。 button1は、おそらく 'interchangeButton'かその行に沿ったものと呼ばれるべきです。このような小さなコードセグメントでは、誰も迷子にならないでしょうが、より大きなプロジェクトで作業する場合は、良い命名体系が不可欠です。

+3

MainForm.javaのオンライン行 – Snicolas

+0

本当の質問はnull引数がコンストラクタに渡されている理由です。つまり、何か他のコードが間違っている可能性があります。 @ user638234、あなたのコードを投稿してください! – Zarjio

+0

画像ファイルが見つからないときに、おそらくヌル値を渡しますか? –

関連する問題