Hey zusammen,
bin gerade dabei ein kleines Tool zu schreiben in dem sich mehrere JPannel aktualisieren und durch Unterbrechungen von Thread.sleep eine Art "Animation" entsteht. Nur ist das mit dem sleep nicht ganz so leicht...
Wenn ich das sleep direkt in der Funktion benutze wo die JPanel gefüllt werden sehe ich nur den Endzustand und nicht die einzelnen Zwischenschritte. Dank Onkel Google bin ich jetzt schon soweit dass ich weiß, dass ich mehrere Threads brauche, einen für das sleep und einen für das Zeichnen. Das klappt inzwischen auch wunderbar. Die beiden Threads laufen parallel, nur kriege ich es nicht hin in dem neu erzeugten Thread der das sleep beinhaltet Variablen zu übergeben. Ausgaben via Syso klappen wunderbar aber ohne das JPanel Objekt kann ich halt nichts darauf zeichnen.
Nun zu meiner Frage, wie übergebe ich einem neuen Thread Variablen? Habe bei meiner Suche nach einer Lösung schon mehrere Ansätze gesehen den Thread zu implementieren, grundsätzlich lief es auf 2 verschiedene Möglichkeiten heraus, eine neue Klasse die von Runnable ableitet, damit hatte ich leider garkeinen Erfolg. Und einen neuen Thread innerhalb der vorhandenen Klassen der die oben genannten Ausgaben lieferte.
Hier mein bisheriger Code:
Hoffe der Code reicht zur Verständnis und enthällt nicht zu viel Müll. An der gekennzeichneten Stelle im logicThread bräuchte ich die Variablen damit ich dann von dort auf die JPanels füllen könnte. Egal ob ich es im new Thread oder in der Run angebe dass dort Parameter übergeben werden, es gibt immer wieder Fehler. Kann mir da vlt jemand helfen und verraten wie das gehen soll?
Vielen Dank im Vorraus
Gruß MeRo
bin gerade dabei ein kleines Tool zu schreiben in dem sich mehrere JPannel aktualisieren und durch Unterbrechungen von Thread.sleep eine Art "Animation" entsteht. Nur ist das mit dem sleep nicht ganz so leicht...
Wenn ich das sleep direkt in der Funktion benutze wo die JPanel gefüllt werden sehe ich nur den Endzustand und nicht die einzelnen Zwischenschritte. Dank Onkel Google bin ich jetzt schon soweit dass ich weiß, dass ich mehrere Threads brauche, einen für das sleep und einen für das Zeichnen. Das klappt inzwischen auch wunderbar. Die beiden Threads laufen parallel, nur kriege ich es nicht hin in dem neu erzeugten Thread der das sleep beinhaltet Variablen zu übergeben. Ausgaben via Syso klappen wunderbar aber ohne das JPanel Objekt kann ich halt nichts darauf zeichnen.
Nun zu meiner Frage, wie übergebe ich einem neuen Thread Variablen? Habe bei meiner Suche nach einer Lösung schon mehrere Ansätze gesehen den Thread zu implementieren, grundsätzlich lief es auf 2 verschiedene Möglichkeiten heraus, eine neue Klasse die von Runnable ableitet, damit hatte ich leider garkeinen Erfolg. Und einen neuen Thread innerhalb der vorhandenen Klassen der die oben genannten Ausgaben lieferte.
Hier mein bisheriger Code:
Code:
package hsd;
IMPORTS
@SuppressWarnings("serial")
public class GUI extends JFrame {
public JPanel _mainMenuePanel = null;
public JPanel _simulationPanel = null;
public JPanel _simulationPanelBackup = null;
public JPanel _dataEntryPanel = null;
public JPanel _outputPanel = null;
public DataEntry _dataEntryObject = null;
public Simulation _simulationObject = null;
public Logic _logicObject = null;
GUI() {
setTitle("Hide and Seek");
...
ActionListener startButtonActionListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
mainMenueStartButtonAction(e);
}
};
}
public void initiate() {
INITIALISIERUNG DES JPANEL MIT ACTION LISTENERN UND CO
}
...
public static void main(String[] args) {
GUI g = new GUI();
}
public void mainMenueStartButtonAction(ActionEvent e) {
_logicObject.start();
}
}
Code:
package hsd;
IMPORTS
public class Logic {
public GUI _guiObject = null;
public DataEntry _dataEntryObject;
public Simulation _simulationObject = null;
public int init = 0;
Logic(GUI guiObject) {
INITIALISIERUNGEN
}
public void start() {
...
_simulationObject.init(xSize, ySize);
...
Thread logicThread = new Thread() {
public void run() {
## HIER BRÄUCHTE ICH DIE VARIABLEN, _guiObject z.B. ##
for (int i = 0; i < 10; i++) {
System.out.println(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
logicThread.start();
}
}
Hoffe der Code reicht zur Verständnis und enthällt nicht zu viel Müll. An der gekennzeichneten Stelle im logicThread bräuchte ich die Variablen damit ich dann von dort auf die JPanels füllen könnte. Egal ob ich es im new Thread oder in der Run angebe dass dort Parameter übergeben werden, es gibt immer wieder Fehler. Kann mir da vlt jemand helfen und verraten wie das gehen soll?
Vielen Dank im Vorraus
Gruß MeRo