Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException Asteroid
Я пишу программу, которая станет первой частью игры астероидов и создаст астероиды для игры. Кажется, у меня возникают проблемы с тем, чтобы что-то показать. Когда я запускаю программу, появляется GUI, и когда я нажимаю кнопку "Пуск", я получаю следующие ошибки:
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)enter code here
Я думаю, что-то не правильно инициализируется, но я не могу найти что-либо
благодарю вас
package asteroidfield;
import java.awt.Point;
import blobzx.*;
import java.util.Random;
class Asteroidfield{
AsteroidField className = new AsteroidField();
}
public class Asteroid extends PolyBlob {
public static Random random = new Random();
public Asteroid(int x, int y, double r) {
super(x=-100, y=-100, r);
}
public void Asteroid (int idx, int jdx, double rot){
//PolyBlob start off location
setDelta(idx, jdx);
//Creating a variable that stores the number of sides
int num_sides = random.nextInt(4)+5;
//Creating a variable for pixels in diameter
int poly_pixels = random.nextInt(20)+10;
//Declare arrays
int[] xd = new int [-100];
int[] yd = new int [-100];
double[] angle = new double [1];
//divide num_side by 2pi and choose random angle for each
for(int m=0; m<num_sides; m++){
double reg_vert = (num_sides/(Math.PI * 2));
angle[m] = (m*reg_vert)+(Math.random()*reg_vert);
}
//Creating random distance for vertice
//Get relative x and y coordinates from BlobUtils
for (int n=0; n<num_sides; n++){
int vert_dis = random.nextInt(4)+5;
Point rp = BlobUtils.rotatePoint(vert_dis, angle[n]);
xd[n] = rp.x;
yd[n] = rp.y;
}
//Instance method from PolyBlob class (set x any y vectices for polygon)
setPolygon(xd, yd);
}
}
А вот и второй класс
package asteroidfield;
import blobzx.*;
import java.util.Random;
class AsteroidField implements BlobGUI{
public static void main(String[] args) {
new AsteroidField();
}
Random random;
//Create sandbox
SandBox sb = new SandBox();
AsteroidField() {
this.random = new Random();
}
//Set sandboxmode.flow(asteroid would appear on the other
//side if it flows out of bound
//Set the frame rate to 15
public void init(){
sb.setSandBoxMode(SandBoxMode.FLOW);
sb.setFrameRate(15);
}
//Create generate() method
//idx and idy determine the velocity of asteroids
//declare and initialize rot for rotation
//PolyBlob creates diamond shaped blob at idx, idy
//Add asteroid to sandbox
@Override
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 b = new Asteroid(idx, idy, rot);
sb.addBlob(b);
}
SandBox.simulate(sb);
}
}