Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe vor ein Programm zu erstellen in dem mehrere Threads eingebaut sind. Nun zu meinem Problem, das Programm hat ein Frame als grafische Oberfläche... und die einzelnen Threads sollen Informationen in Textfelder übergeben die sich im Hauptprogramm befinden. Aber leider weiß ich nicht wie. Ein Beispiel dafür ist:
http://selfjava.de/java0901.htm
Nur soll die Ausgabe dort nicht über die Konsole laufen sondern über Textfelder. Hoffe ich hab das so erklärt das es verständlich ist.
Vielen dank im Voraus!!!
Also, nach dem Beispiel würdest du eine Hauptklasse haben, und für jeden Neuen Thread eine eigene. Um in den Thread-Klassen etwas in die TextArea der Hauptklasse zu tun muss die TextArea bekannt sein, sprich du musst sie den Klassen übergeben.
Kleine Demonstration:
Hauptklasse:
Code:
import javax.swing.*;
public class Main extends JFrame{
JTextArea text;
public static void main( String[] args ){
new Main();
}
public Main(){
super("test");
setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
text = new JTextArea();
add(text);
Thread1 th1 = new Thread1(text); // Instanz der Thread-Klasse erzeugen und die JTextArea übergeben
th1.start();
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setVisible( true );
}
}
Thread1:
Code:
import javax.swing.JTextArea;
public class Thread1 extends Thread {
JTextArea text;
public Thread1(JTextArea ta) { //Konstruktor übernimmt die JTextArea, somit hier bekannt.
text = ta;
}
public void run() {
for (int x=0; x<10; x++) {
text.setText("Thread der Klasse Thread1 läuft: Schleife " + x);
try {
this.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
so einfach ist das leider nicht... ich möchte das der Thread einem Textfeld im Hauptprogramm eine Information übergibt, und das geht leider nicht in dem ich einfach im Thread anstatt SOP "BLABLA" schreibe sondern ich muss dem Thread erst irgendwie klar machen das das Textfeld im Hauptprogramm ist...
doch genau so einfach ist es
schau dir Dreezard's beispiel an. du übergibst das Textfeld als Referenz wenn du den Thread erstellst.
anpassen musst du nur noch, dass du nicht einfach setText() aufrufen kannst, sondern das ganze in invokeLater verpacken muss (wie in beni's beispiel)
oh mein Brouser hatte mir die anderen Antworten noch garnet angezeigt... das hier drüber ging an "Kian".....
das was ich bis jetzt von den neuen Antworten gelesen habe klingt recht einleuchtent... schonmal vielen dank dafür!!!!