2016-04-07 6 views
0

Ich studiere ein kleines Beispiel über Thread und das Programm für das Beispiel ist folgen, das Kompilieren gut, aber wenn ich den Knopf drücke, um den Kreis zu zeichnen Netbeans werfen Sie mir eine Ausnahme, jemand könnte mir helfen.AWT-EventQueue-0 exepction

Exception in thread "AWT-Eventqueue-0" java.lang.NullPointerException bei feedingschedule.FillDemo.fill (FillDemo.java:63) bei feedingschedule.FillDemo.actionPerformed (FillDemo.java:56) bei javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:2022) bei javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton.java:2348) bei javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:402) um javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:259) bei javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java:252) bei java.awt.Component.processMouseEvent (Component.java:6535) bei javax.swing.JComponent.processMouseEvent (JComponent.java: 3324) unter java.awt.Component.processEvent (Component.java:6300) um java.awt.Container.processEvent (Container.java:2236) um java.awt.Component.dispatchEventImpl (Component.java: 4891) bei java.awt.Container.dispatchEventImpl (Container.java:2294) bei java.awt.Component.dispatchEvent (Component.java:4713) bei java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4888) bei java.awt.LightweightDispatcher.processMouseEvent (Container .java-: 4525) bei java.awt.LightweightDispatcher.dispatchEvent (Container.java:4466) bei java.awt.Container.dispatchEventImpl (Container.java:2280) bei java.awt.Window.dispatchEventImpl (Window.java : 2750) um java.awt.Component.dispatchEvent (Component.java:4713) um java.awt.EventQueue.dispatchEventImpl (EventQueue.java:758) um ​​ java.awt.EventQueue.access $ 500 (EventQueue.java: 97) um java.awt.EventQueue $ 3.run (EventQueue.java:709) um java.awt.EventQueue $ 3.run (EventQueue.java:703) um java.security.AccessController.doPrivileged (Native Methode) um java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) um java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:86) bei java.awt.EventQueue $ 4.run (EventQueue.java:731) bei java.awt.EventQueue $ 4.run (EventQueue.java:729) bei java.security.AccessController.doPrivileged (native Methode) bei java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) bei java.awt.EventQueue.dispatchEvent (EventQueue.java:728) bei java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:201) bei java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:116) bei java.awt.EventDispatchThread.pumpEventsForHie rarchy (EventDispatchThread.java:105) bei java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101) bei java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) bei java.awt.EventDispatchThread. run (EventDispatchThread.java:82) BUILD SUCCESSFUL (Gesamtzeit: 3 Sekunden)

Dank.

package feedingschedule; 

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
/** 
* 
* @author ManagerCompufi 
*/ 
public class FillDemo extends JFrame implements ActionListener { 
    public static final int WIDTH_S = 300; 
    public static final int HEIGHT_S = 200; 
    public static final int FILL_WITH = 300; 
    public static final int FILL_HEIGHT = 100; 
    public static final int CIRCLE_SIZE = 10; 
    public static final int PAUSE = 100; 

    private final JPanel box; 

public static void main(String[] args) { 

    FillDemo gui = new FillDemo(); 
    gui.setVisible(true); 

} 


public FillDemo(){ 
    setSize(WIDTH_S, HEIGHT_S); 
    setTitle("FillDemo"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new BorderLayout()); 
    box = new JPanel(); 

    JPanel buttonPanel = new JPanel(); 
    buttonPanel.setLayout(new FlowLayout()); 
    JButton startButton = new JButton(); 
    startButton.addActionListener(this); 
    buttonPanel.add(startButton); 
    add(buttonPanel, "South"); 
} 


    @Override 
    public void actionPerformed(ActionEvent e) { 
    fill(); 
    } 

    public void fill(){ 
    Graphics g = box.getGraphics(); 
     for (int y = 0; y < FILL_HEIGHT; y = y + CIRCLE_SIZE) 
     for (int x = 0; x < FILL_WITH; x = x + CIRCLE_SIZE){ 
     g.fillOval(x, y, CIRCLE_SIZE, CIRCLE_SIZE); 
     doNothing(PAUSE); 

     } 
    } 

    public void doNothing(int milliseconds){ 
    try { 
     Thread.sleep(milliseconds); 
    } 
    catch (InterruptedException e) { 
     System.out.println("Unexpected interrup"); 
     System.exit(0); 
    } 

    } 
} 

Antwort

0

in Ihrem Programm,

Graphics g = box.getGraphics(); // which returns null 

und danach, Sie versuchen, eine Operation auf, es auszuführen,

g.fillOval(x, y, CIRCLE_SIZE, CIRCLE_SIZE); // which leads to NullPointerException 

Also, besser zu Kontrollen setzen dort ebenfalls,

Graphics g = box.getGraphics(); 
if(g != null){ 
     for (int y = 0; y < FILL_HEIGHT; y = y + CIRCLE_SIZE) 
      for (int x = 0; x < FILL_WITH; x = x + CIRCLE_SIZE){ 
       ...... 
      } 
    }