ALos ich habe ein Game of Life programmiert, welches eine JTable als Ausgabe benutzt (keine glückliche Wahl, aber ich möchte nicht aless umschreiben und mit Canvas und zeichnen usw. kenne ich mich noch nicht aus)
Nun habe ich einen einfachen Thread Geschrieben (Klasse CThread) und möchte, das dieser die Tabelle füllt.
Nun hab ich das Problem, das er bei Einzelschritten die Tabelle fükkt, aber in Threads dies nicht tut(genau wie in langen schleifen erst am Ende das Gesamtergnis gezeigt wird)
Ich habe davon gehört, dass Swing nich Thread-sicher sein sollte, hab aber 1. nich so viel Ahnung davon und weiß 2. nich ob man das i-wie umgehen kann.
hier Mal der Thread: (X steht für eine Lebende Zelle)
Die Methode ÜberG habe ich geschrieben, da der einfache Konstruktor Probleme machte und ich die Werte auch einfach ersetzen möchte.
hier noch die Methoden aus CManager:
PS:Ich wusste leider nicht in welches Forum ich dies posten sollte, da es Swing und Threads behandelt, aber auch eine Anfänger-Frage ist. also bitte verschieben, wenns falsch ist
Nun habe ich einen einfachen Thread Geschrieben (Klasse CThread) und möchte, das dieser die Tabelle füllt.
Nun hab ich das Problem, das er bei Einzelschritten die Tabelle fükkt, aber in Threads dies nicht tut(genau wie in langen schleifen erst am Ende das Gesamtergnis gezeigt wird)
Ich habe davon gehört, dass Swing nich Thread-sicher sein sollte, hab aber 1. nich so viel Ahnung davon und weiß 2. nich ob man das i-wie umgehen kann.
hier Mal der Thread: (X steht für eine Lebende Zelle)
Java:
public class CThread extends Thread{
private JTable Table;
private JTextField tfGen;
private boolean flag = false;
private CManager Manager = new CManager();
private int Geschw = 750;
private int generation = 0;
public void UberG(JTable Table, JTextField tfGen){
this.Table = Table;
this.tfGen = tfGen;
}
public void clicked(){
flag = !flag;
}
public void Geschw(int Geschw){
this.Geschw = Geschw;
}
public void run(){
while(flag){
Manager.life();
generation++;
//print();
try {
Thread.sleep(Geschw);
} catch (InterruptedException ex) {
Logger.getLogger(CThread.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("works!");
}
}
public void print(){
for(int i=0; i<40; i++) {
for(int a=0; a<50; a++) {
if(Manager.getStatus(i, a)){
Table.setValueAt("x", i, a);
}
else{
Table.setValueAt("", i, a);
}
tfGen.setText(""+generation);
}
}
}
Die Methode ÜberG habe ich geschrieben, da der einfache Konstruktor Probleme machte und ich die Werte auch einfach ersetzen möchte.
hier noch die Methoden aus CManager:
Java:
public boolean getStatus(int i, int a) {
return fields[i][a];
}
public boolean life() {
int counter;
for(int i = 1; i<39; i++) {
for(int a = 1; a<49; a++) {
counter = countNeighbors(i, a);
if(fields[i][a]) {
if(counter <2) {
buffer[i][a] = false;
}
if(counter >= 2) {
buffer[i][a] = true;
}
if(counter>3) {
buffer[i][a] = false;
}
counter =0;
}
else{
if(counter==3) {
buffer[i][a] = true;
}
}
}
}
fields = buffer;
buffer = new boolean[40][50];
boolean help = equals(); // vernachlässigbar, da Zusatzfunktion
EQ = fields; // " " "
return help; // " " "
}
PS:Ich wusste leider nicht in welches Forum ich dies posten sollte, da es Swing und Threads behandelt, aber auch eine Anfänger-Frage ist. also bitte verschieben, wenns falsch ist