2016-02-25 81 views
0

我一直在尝试在java中创建小行星游戏的第一部分,该游戏仅显示20个小行星在场中移动。当我一走进来启动它,我得到这些错误:尝试在java中构建小行星游戏时出现错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at blobzx.SandBox$1.actionPerformed(SandBox.java:82) 
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:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
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:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
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) 

我已经通过其他文章看这里,但似乎无法找到这种情况的解决方案。这里是我写的代码:

package AsteroidField; 

import blobzx.*; 
import java.awt.Point; 
import java.util.Random; 

public class AsteroidField implements BlobGUI{ 

    Random random; 

    SandBox sand = new SandBox(); 

    public static void main(String[] args){ 


     new AsteroidField(); 
    } 

    public AsteroidField(){ 

     this.random = new Random(); 

    } 

    public void init(){ 

     sand.setSandBoxMode(SandBoxMode.FLOW); 
     sand.setFrameRate(15); 
     sand.init(this); 

    } 

    public void generate(){ 

     for(int i=0; i<20; i++){ 

      int idx = random.nextInt(6)-3; 
      int idy = random.nextInt(6)-3; 
      double rot = (random.nextInt(2)-1)*.1; 

      PolyBlob a = new Asteroid(idx, idy, rot); 
      sand.addBlob(a); 
     } 

     SandBox.simulate(sand); 

    } 
} 

    package AsteroidField; 

import blobzx.*; 
import java.util.Random; 
import java.awt.Point; 

public class Asteroid extends PolyBlob { 

    private Random random = new Random(); 

    public Asteroid(int idx, int jdx, double rot){ 


     super(-100, -100, rot); 


     setDelta(idx, jdx); 

     int sides = random.nextInt(4)+5; 
     int pix = random.nextInt(20)+10; 

     int[] x = new int [-100]; 
     int[] y = new int [-100]; 
     double[] angle = new double [1]; 

     for(int i=0; i<sides; i++){ 

      double region = ((Math.PI*2)/sides); 
      angle[i] = (i*region)+(Math.random()*region); 

     } 

     for(int j=0; j<sides; j++){ 

      int distance = random.nextInt(10)+5; 
      Point point = BlobUtils.rotatePoint(distance, angle[j]); 

      x[j] = point.x; 
      y[j] = point.y; 

     } 

     setPolygon(x, y); 

    } 
} 

任何关于这个问题的帮助将不胜感激。

+0

堆栈跟踪非常清晰,您的错误发生在您的'SandBox'类中,所以您应该在您的问题中包含该类的代码(或至少是所创建的所有ActionListeners)。 – VGR

+0

stacktrace向您显示发生异常的位置,请检查此/这些代码行吗? – Tom

回答

0

的一两件事,我看到,在我击中了马上为线:

int[] x = new int [-100]; 
int[] y = new int [-100]; 

错误我只编译这些短语在Java程序中内嵌了之后。

Exception in thread "main" java.lang.NegativeArraySizeException 
    at HelloWorld.main(HelloWorld.java:5) 

我假设其他基本的语法错误可能存在,所以你应该检查你的基本语法。