2017-01-06 15 views
0

Javaの初心者として、私はwindowsbuilder(eclipseプラグイン)の助けを借りてウィンドウアプリケーション "Game"を作成しようとしています。Java - extern関数でJLabel Frontcolorを変更する

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at Leiterspiel.allblack(Leiterspiel.java:81) 
    at Leiterspiel$2.mouseClicked(Leiterspiel.java:234) 
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at Leiterspiel.allblack(Leiterspiel.java:81) 
    at Leiterspiel$2.mouseClicked(Leiterspiel.java:234) 
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

私はなりたい:私は(allblack())はextern関数内でラベルを変更しようとして は今、コンソールは、私は特定のボタンを(画面が正しく表示されます)を押すと、以下のエラーが出ています"allblack()"と同じコードが "inizialize()"で動作するので誰でも私に説明することができればすばらしい。 おかげ

[Pre-sampled import] 
public void allblack() 
{ 
    l1.setForeground(Color.black); 
    l2.setForeground(Color.black); 
} 
public void initialize() { 

    frmDasLeiterspiel = new JFrame(); 
    frmDasLeiterspiel.setResizable(false); 
    frmDasLeiterspiel.setTitle("Das Leiterspiel"); 
    frmDasLeiterspiel.setBounds(100, 100, 420, 420); 
    frmDasLeiterspiel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmDasLeiterspiel.getContentPane().setLayout(null); 

    JLabel l1 = new JLabel("1"); 
    l1.setBackground(Color.LIGHT_GRAY); 
    l1.setBounds(340, 190, 50, 50); 
    l1.setHorizontalAlignment(SwingConstants.CENTER); 
    frmDasLeiterspiel.getContentPane().add(l1, BorderLayout.CENTER); 

    JLabel l2 = new JLabel("2"); 
    l2.setBackground(Color.LIGHT_GRAY); 
    l2.setHorizontalAlignment(SwingConstants.CENTER); 
    l2.setBounds(278, 190, 50, 50); 
    frmDasLeiterspiel.getContentPane().add(l2); 
    [....] 
    JButton btnNewButton = new JButton("Roll the dice!"); 
    btnNewButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      allblack(); 
     } 
    }); 
    btnNewButton.setBounds(12, 294, 378, 25); 
    frmDasLeiterspiel.getContentPane().add(btnNewButton); 
    [...] 
    } 
+0

作成しているラベルは 'initialize'メソッドのローカルです。 JLabel l1 = new JLabel( "1"); 'l1 = new JLabel(" 1 ");および' JLabel l2 = new JLabel( "2"); 'l2 = new JLabel(" 2 " ");'実際のラベルを初期化します。 – Berger

答えて

0

それはinitializeメソッドでのみexitst L1およびL2の変数のように見えます。 これを試してください:

public void allblack() { 
    l1.setForeground(Color.black); 
    l2.setForeground(Color.black); 
} 

private JLabel l1,l2; 
public void initialize() { 

    frmDasLeiterspiel = new JFrame(); 
    frmDasLeiterspiel.setResizable(false); 
    frmDasLeiterspiel.setTitle("Das Leiterspiel"); 
    frmDasLeiterspiel.setBounds(100, 100, 420, 420); 
    frmDasLeiterspiel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmDasLeiterspiel.getContentPane().setLayout(null); 

    l1 = new JLabel("1"); 
    l1.setBackground(Color.LIGHT_GRAY); 
    l1.setBounds(340, 190, 50, 50); 
    l1.setHorizontalAlignment(SwingConstants.CENTER); 
    frmDasLeiterspiel.getContentPane().add(l1, BorderLayout.CENTER); 

    l2 = new JLabel("2"); 
    l2.setBackground(Color.LIGHT_GRAY); 
    l2.setHorizontalAlignment(SwingConstants.CENTER); 
    l2.setBounds(278, 190, 50, 50); 
    frmDasLeiterspiel.getContentPane().add(l2); 
    [....] 
    JButton btnNewButton = new JButton("Roll the dice!"); 
    btnNewButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      allblack(); 
     } 
    }); 
    btnNewButton.setBounds(12, 294, 378, 25); 
    frmDasLeiterspiel.getContentPane().add(btnNewButton); 
    [...] 
    } 
関連する問題