[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] Why do I get a null pointer exception when trying to dispose a composite within a thread in my program?
|
Hi,
I try to dispose a composite but get a null pointer exception. I don't
understand why it happens. It would be nice if someone can help me a
little bit. The lines are 71 and 75.
Here's the programs, it's a simple tic tac to, so have fun with playing ;)
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
public class swttictacto {
public int[] spielfeld = new int[34];
public boolean aktuellerspieler = true;
public guithread referenz;
public static void main (String[] args) {
swttictacto spiellogik = new swttictacto();
}
public swttictacto () {
for (int p = 0; p < spielfeld.length; p++) {
spielfeld[p]=0;
}
referenz = new guithread(this);
referenz.start();
}
public boolean gewonnen() {
boolean ok = false;
if ((spielfeld[11]==1 && spielfeld[12]==1 && spielfeld[13]==1) ||
(spielfeld[21]==1 && spielfeld[22]==1 && spielfeld[23]==1) ||
(spielfeld[31]==1 && spielfeld[32]==1 && spielfeld[33]==1) ||
(spielfeld[11]==1 && spielfeld[22]==1 && spielfeld[33]==1) ||
(spielfeld[31]==1 && spielfeld[22]==1 && spielfeld[13]==1) ||
(spielfeld[11]==1 && spielfeld[21]==1 && spielfeld[31]==1) ||
(spielfeld[31]==1 && spielfeld[32]==1 && spielfeld[33]==1)) { ok = true;
referenz.gewonnen(1); }
if ((spielfeld[11]==2 && spielfeld[12]==2 && spielfeld[13]==2) ||
(spielfeld[21]==2 && spielfeld[22]==2 && spielfeld[23]==2) ||
(spielfeld[31]==2 && spielfeld[32]==2 && spielfeld[33]==2) ||
(spielfeld[11]==2 && spielfeld[22]==2 && spielfeld[33]==2) ||
(spielfeld[31]==2 && spielfeld[22]==2 && spielfeld[13]==2) ||
(spielfeld[11]==2 && spielfeld[21]==2 && spielfeld[31]==2) ||
(spielfeld[31]==2 && spielfeld[32]==2 && spielfeld[33]==2)) { ok = true;
referenz.gewonnen(2); }
if (!ok && (spielfeld[11]==1 || spielfeld[11]==2) &&
(spielfeld[12]==1 || spielfeld[12] == 2) && (spielfeld[13]==1 ||
spielfeld[13]==2) && (spielfeld[21]==1 || spielfeld[21]==2) &&
(spielfeld[22]==1 || spielfeld[22]==2) && (spielfeld[23]==1 ||
spielfeld[23]==2) && (spielfeld[31]==1 || spielfeld[31]==2) &&
(spielfeld[32]==1 || spielfeld[32]==2) && (spielfeld[33]==1 ||
spielfeld[33]==2)) { referenz.gleichstand(); ok = true; }
return ok;
}
public void clicked(int buttonnumber) {
if (aktuellerspieler && spielfeld[buttonnumber]==0) {
spielfeld[buttonnumber] = 1;
referenz.klick(buttonnumber,spielfeld[buttonnumber]);
if (!gewonnen()) {
aktuellerspieler = !aktuellerspieler;
referenz.showPlayerMsg(aktuellerspieler);
}
}
if (!aktuellerspieler && spielfeld[buttonnumber]==0) {
spielfeld[buttonnumber] = 2;
referenz.klick(buttonnumber,spielfeld[buttonnumber]);
if (!gewonnen()) {
aktuellerspieler = !aktuellerspieler;
referenz.showPlayerMsg(aktuellerspieler);
}
}
}
}
class guithread extends Thread {
public swttictacto referenz;
public Label information;
public Composite oben;
public Composite unten;
Button b11,b12,b13,b21,b22,b23,b31,b32,b33;
public guithread(swttictacto ref) {
referenz = ref;
}
public void showPlayerMsg(boolean player) {
if (player) information.setText("Spieler 1 ist dran.");
if (!player) information.setText("Spieler 2 ist dran.");
}
public void gewonnen(int a) {
information.setText("Spieler "+a+" hat gewonnen");
this.unten.dispose();
}
public void gleichstand() {
information.setText("Gleichstand");
this.unten.dispose();
}
public void klick(int buttonzahl,int inhalt) {
if (buttonzahl==11) { b11.setText(""+inhalt); }
if (buttonzahl==12) { b12.setText(""+inhalt); }
if (buttonzahl==13) { b13.setText(""+inhalt); }
if (buttonzahl==21) { b21.setText(""+inhalt); }
if (buttonzahl==22) { b22.setText(""+inhalt); }
if (buttonzahl==23) { b23.setText(""+inhalt); }
if (buttonzahl==31) { b31.setText(""+inhalt); }
if (buttonzahl==32) { b32.setText(""+inhalt); }
if (buttonzahl==33) { b33.setText(""+inhalt); }
}
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Titel in der Titelleiste");
shell.setSize(200,200);
GridLayout layoutshell = new GridLayout();
layoutshell.numColumns = 1;
shell.setLayout(layoutshell);
oben = new Composite(shell,SWT.NO_BACKGROUND);
Composite unten = new Composite(shell,SWT.NO_BACKGROUND);
GridLayout layoutoben = new GridLayout();
layoutoben.numColumns = 1;
oben.setLayout(layoutoben);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
unten.setLayout(layout);
information = new Label(oben,SWT.LEFT);
information.setText("Spieler 1 ist dran.");
b11 = new Button(unten,SWT.PUSH | SWT.CENTER);b12 = new
Button(unten,SWT.PUSH | SWT.CENTER);b13 = new Button(unten,SWT.PUSH |
SWT.CENTER);
b21 = new Button(unten,SWT.PUSH | SWT.CENTER);b22 = new
Button(unten,SWT.PUSH | SWT.CENTER);b23 = new Button(unten,SWT.PUSH |
SWT.CENTER);
b31 = new Button(unten,SWT.PUSH | SWT.CENTER);b32 = new
Button(unten,SWT.PUSH | SWT.CENTER);b33 = new Button(unten,SWT.PUSH |
SWT.CENTER);
b11.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(11);
break;
}
}
});
b12.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(12);
break;
}
}
});
b13.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(13);
break;
}
}
});
b21.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(21);
break;
}
}
});
b22.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(22);
break;
}
}
});
b23.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(23);
break;
}
}
});
b31.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(31);
break;
}
}
});
b32.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(32);
break;
}
}
});
b33.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
referenz.clicked(33);
break;
}
}
});
shell.open();
while(!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}