2016-02-25 77 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) 

我假設其他基本的語法錯誤可能存在,所以你應該檢查你的基本語法。