Hallo zusammen. Ich bin bei der Programmierung eines kleinen Programmes auf ein Problem gestossen für das ich bisher noch keine Lösung gefunden habe. Es sei vorgewarnt das ich nicht allzuviel Erfahrung mit Java habe. Der Programmaufbau sieht folgendermassen aus:
[Gui] <----> [Controller/Datenfluss Klasse] <----> [Arbeiter/Berechnungsklassen]
Die Gui kommuniziert also über [Controller/Datenfluss Klasse] an die Arbeiterklassen weiter was berechnet werden soll. Die Gui/Swing komponente wird über folgenden Code in einem eigenen Thread gestartet:
[Java]
private static ProgramWindow mainProgramFrame;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
mainProgramFrame = new ProgramWindow(initialize);
mainProgramFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
[/Java]
Wenn nun über die Gui eine neue Berechnung eingeleitet wird, wird in den Arbeiterklassen wiederum ein eigener Thread erstellt, der die entsprechende Berechnung abarbeitet. Diese Arbeiter-Threads erstelle ich folgendermaßen:
[Java]
Thread createOrganismThread = new Thread(new CreateInitialOrganisms(this, organismDimension, organismCount));
createOrganismThread.start();
[/Java]
und die eigendliche Thread Klasse:
[Java]
public class CreateInitialOrganisms implements Runnable {
[...]
public void run() {
[Berechnung]
}
}
[/Java]
Das Problem das hierbei entsteht ist, dass die Gui zwar nicht blockiert, allerdings unfassbar langsam läuft und quasi nichtmehr zu gebrauchen ist. Ich hab es schon mit der Heruntersetzung der entsprechenden Priorität des Arbeiter-Threads probiert, aber immer mit dem selben Ergebniss - namentlich, die Gui ist nichtmehr sinnvoll benutzbar. Irgendwo wird hier denke ich etwas falsch gemacht, aber ich weis nicht wirklich wo. Der Arbeiter-Thread an sich greift auf keine Ressourcen von ausserhalb zu sondern sendet, wenn beendet seine Berechnungen zurück.
[Gui] <----> [Controller/Datenfluss Klasse] <----> [Arbeiter/Berechnungsklassen]
Die Gui kommuniziert also über [Controller/Datenfluss Klasse] an die Arbeiterklassen weiter was berechnet werden soll. Die Gui/Swing komponente wird über folgenden Code in einem eigenen Thread gestartet:
[Java]
private static ProgramWindow mainProgramFrame;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
mainProgramFrame = new ProgramWindow(initialize);
mainProgramFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
[/Java]
Wenn nun über die Gui eine neue Berechnung eingeleitet wird, wird in den Arbeiterklassen wiederum ein eigener Thread erstellt, der die entsprechende Berechnung abarbeitet. Diese Arbeiter-Threads erstelle ich folgendermaßen:
[Java]
Thread createOrganismThread = new Thread(new CreateInitialOrganisms(this, organismDimension, organismCount));
createOrganismThread.start();
[/Java]
und die eigendliche Thread Klasse:
[Java]
public class CreateInitialOrganisms implements Runnable {
[...]
public void run() {
[Berechnung]
}
}
[/Java]
Das Problem das hierbei entsteht ist, dass die Gui zwar nicht blockiert, allerdings unfassbar langsam läuft und quasi nichtmehr zu gebrauchen ist. Ich hab es schon mit der Heruntersetzung der entsprechenden Priorität des Arbeiter-Threads probiert, aber immer mit dem selben Ergebniss - namentlich, die Gui ist nichtmehr sinnvoll benutzbar. Irgendwo wird hier denke ich etwas falsch gemacht, aber ich weis nicht wirklich wo. Der Arbeiter-Thread an sich greift auf keine Ressourcen von ausserhalb zu sondern sendet, wenn beendet seine Berechnungen zurück.
Zuletzt bearbeitet: