Ich habe ein dubioses Problem. Ich bekomme eine NullpointerException sobald ich anfange in der Klasse view die ActionListener wieder sichtbar zu machen. Bei dem ActionListener für halbe funktioniert es manchmal noch aber spätestens wenn ich den ActionListener für "eine" freigebe raucht er ab. Was kann das sein?
Java:
import java.awt.*;
import java.lang.Math.*;
import java.awt.event.*;
interface Notifier{
public void notifyMe(String s, int i);
}
class Modell{
public Modell(int x, int y, Notifier n){
xLength=x;
yLength=y;
mNot=n;
}
public void zugInit(){
this.xKord=new int[xLength];
this.yKord=new int[yLength];
}
public void getNotification(String s, int i){
mNot.notifyMe(s,i);
}
public void remake(){
int[] tempX=new int[xKord.length];
int[] tempY=new int[yKord.length];
for(int i=1;i<xKord.length;++i){
tempX[i-1]=xKord[i];
tempY[i-1]=yKord[i];
}
tempX[xKord.length-1]=(int)((java.lang.Math.random())*400);
tempY[yKord.length-1]=(int)((java.lang.Math.random())*400);
xKord=tempX;
yKord=tempY;
}
public void makeKord(){
for(int i=0;i<xLength;++i){
xKord[i]=(int)((java.lang.Math.random())*400);
yKord[i]=(int)((java.lang.Math.random())*400);
}
}
static int[] xKord;
static int[] yKord;
static int xLength;
static int yLength;
Notifier mNot;
int setSpeed=500;
Color c=new Color(0,0,0);
}
class View extends Frame{
public View(Modell mod){
super("StreckenZug");
setSize(400,400);
setVisible(true);
this.mod=mod;
MenuBar mBar=new MenuBar();
Menu datei=new Menu("Datei");
Menu speed=new Menu("Geschwindigkeit");
Menu length=new Menu("Länge");
Menu color=new Menu("Farbe");
MenuItem stop=new MenuItem("0");
stop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
bridgeNotification("speed",0);
}
});
MenuItem halbe=new MenuItem("0,5");
// halbe.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("speed",500);
// }
// });
MenuItem eine=new MenuItem("1");
// eine.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("speed",1000);
// }
// });
MenuItem sieben=new MenuItem("7");
// sieben.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("lange",7);
// }
// });
MenuItem fuenf=new MenuItem("5");
// fuenf.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("lange",5);
// }
// });
MenuItem zehn=new MenuItem("10");
// zehn.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("lange",10);
// }
// });
//
MenuItem gruen=new MenuItem("Gruen");
// gruen.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("farbe",2);
// }
// });
MenuItem rot=new MenuItem("rot");
// rot.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("farbe",1);
// }
// });
MenuItem blau=new MenuItem("Blau");
// blau.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// bridgeNotification("farbe",3);
// }
// });
color.add(rot);
color.add(gruen);
color.add(blau);
length.add(sieben);
length.add(fuenf);
length.add(zehn);
speed.add(stop);
speed.add(halbe);
speed.add(eine);
datei.add(speed);
datei.add(length);
datei.add(color);
mBar.add(datei);
setMenuBar(mBar);
}
public void bridgeNotification(String s, int i){
mod.getNotification(s,i);
}
public void update(){
repaint();
}
public void paint(Graphics g){
g.setColor(mod.c);
for(int i=1;i<mod.xKord.length;++i){
g.drawLine(mod.xKord[i-1],mod.yKord[i-1],mod.xKord[i],mod.yKord[i]);
}
try{
mod.remake();
Thread.sleep(mod.setSpeed);
update();
}
catch(Exception e){}
}
Modell mod;
}
class Control implements Notifier{
public Control(){
mod=new Modell(8,8,this);
view=new View(mod);
mod.zugInit();
mod.makeKord();
}
public void notifyMe(String s, int i){
int value=i;
String type=s;
if(type=="speed")
mod.setSpeed=i;
if(type=="lange"){
try{
mod.xLength=value;
mod.yLength=value;
mod.zugInit();
mod.makeKord();
mod.setSpeed=1000;
}
catch(NullPointerException n){}
}
if(type=="farbe"){
if(value==1)
mod.c=new Color(255,0,0);
if(value==2)
mod.c=new Color(0,255,0);
if(value==3)
mod.c=new Color(0,0,255);
}
}
Modell mod;
View view;
}
public class UE8A2{
public static void main(String[] args){
Control con=new Control();
}
}