2016-11-18 7 views
1

私は初心者ですが、私はJava GUIを使用していますが、なぜtherがエラーであるのか分かりません。私にはclass Phong(Frameclass)とclass LoaiPhongがあります。 Phongクラスでは、方法GetItem5()GetPop()LoaiPhongクラスのプロパティを取得しようとするとエラーが発生します。ただし、label(MainPanel.add(phongThuong[0].GetLabel());)が正常に実行されます。だから、なぜ私はエラーを得るのですか?スレッド「AWT-EventQueue-0」の例外GUIでのNullPointerException?

public class Phong extends javax.swing.JFrame { 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     phongThuong[0] = new LoaiPhong(); 
     MainPanel.add(phongThuong[0].GetLabel()); 
     phongThuong[0].GetItem5().addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(null, "Time start:", 
        "Title", JOptionPane.WARNING_MESSAGE); 
      } 

     }); 
     phongThuong[0].GetPop().add(phongThuong[0].GetItem5()); 
    } 
} 
class LoaiPhong{ 
    private JMenuItem item5; 
    private JPopupMenu pop; 
    LoaiPhong(){ 
     JMenuItem item5 = new JMenuItem("Move"); 
    } 
    JPopupMenu GetPop(){ 
     return this.pop; 
    } 
    JMenuItem GetItem5(){ 
     return this.item5; 
    } 
} 

error: 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at doanjava3.Phong.jButton1ActionPerformed(Phong.java:160) 
    at doanjava3.Phong.access$000(Phong.java:32) 
    at doanjava3.Phong$1.actionPerformed(Phong.java:81) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6533) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
    at java.awt.Component.processEvent(Component.java:6298) 
    at java.awt.Container.processEvent(Container.java:2236) 
    at java.awt.Component.dispatchEventImpl(Component.java:4889) 
    at java.awt.Container.dispatchEventImpl(Container.java:2294) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
    at java.awt.Container.dispatchEventImpl(Container.java:2280) 
    at java.awt.Window.dispatchEventImpl(Window.java:2746) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:731) 
    at java.awt.EventQueue$4.run(EventQueue.java:729) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

UPDATE: 私はprivate JMenuItem item5を変更しようとしました。 private JMenuItem item5=new JMenuItem("Move");private JPopupMenu pop;private JPopupMenu pop = new JPopupMenu("option");になっていて、うまくいきます。私はコンストラクタで私はJMenuItem item5 = new JMenuItem("Move");を初期化しましたが、なぜそれをプロパティで初期化すると思いますか?

+0

この例外はどのラインでスローされますか? Btw:Javaコードスタイルを使用してください。関数名はJavaで大文字で始まらない。 – brummfondel

+1

「なぜそれがエラーなのかわかりません。」 - エラーメッセージがあなたに伝えます。 160行目にヌル値を含む変数があります。ですから、最初にどの変数がnullであるのか把握し、それがなぜnullであるのかを把握してください。私たちはあなたの方法が何をしているのか分からないので、私たちを助けることはできません。 – camickr

+0

*それはうまく動作します* - あなたは実際に値をゼロ以外の –

答えて

2

私はこれをあなたの更新に返信します: 最初は正しく変数を初期化していなかったのでうまくいきました。あなたはちょうどprivate JMenuItem item5と言って、コンストラクタでJMenuItem item5=new JMenuItem("Move");と言っていますが、コンストラクタからJMenuItemというキーワードを取り除いて唯一のものとする必要があるからです。item5=new JMenuItem("Move"); コンストラクタで(良い方法で)初期化してください。 。

class Phong() 
{ 
    private JMenuItem item5 
    public Phong() 
    { 
     item5=new JMenuItem("Move"); 
    } 
} 

そしてまた、あなたのPhongクラスにActionListenerを実装し、実装されていないメソッドを追加してみてください。

+0

に初期化しているので、あなたはクラスのコンストラクタ – Linksx

+0

から 'JMenuItem'キーワードを削除する必要がありました。何かを初期化したいときは私は私の答えで言ったように。あなたが書いたものと私が書いたものを比較しようとすると、何か違いが見えますか? – Linksx

関連する問題