Hallo liebe Gemeinde!
Ich bin am Lernen und nutze dafür Java (java 1.8.0_60).
Ich schaffe es leider nicht mehrere Threads zu erstellen und die Stage weiter laufen zu lassen!
Problem:
- ich kann eine Instanz erstellen lassen
- sobald diese läuft, ist der Stage nicht mehr erreichbar und nimmt kein Event entgegen
Ein Minimalbeispiel habe ich angehangen und hoffe auf einen vielversprechenden Tip von euch.
Ziel:
- auf Knopfdruck einen zusätzlichen Thread erstellen
- jeder Thread soll fortlaufend ein Counter auf die Konsole ausgeben
Ich bin am Lernen und nutze dafür Java (java 1.8.0_60).
Ich schaffe es leider nicht mehrere Threads zu erstellen und die Stage weiter laufen zu lassen!
Problem:
- ich kann eine Instanz erstellen lassen
- sobald diese läuft, ist der Stage nicht mehr erreichbar und nimmt kein Event entgegen
Ein Minimalbeispiel habe ich angehangen und hoffe auf einen vielversprechenden Tip von euch.
Ziel:
- auf Knopfdruck einen zusätzlichen Thread erstellen
- jeder Thread soll fortlaufend ein Counter auf die Konsole ausgeben
Java:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
* Created by
* Erstellungsdatum 31.10.15.
*/
public class TreadTestInStage extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Button testButton = new Button("neuer Tread");
testButton.setOnAction(new TestHandler());
BorderPane layout = new BorderPane(testButton);
Scene window = new Scene(layout);
primaryStage.setScene(window);
primaryStage.show();
}
/**
* eigener Handler, in welchem ein Thread erstellt wird
*/
public class TestHandler implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent event) {
new Counter().start();
}
}
/**
* ein Thread, welche zusätzlich ausgeführt werden soll
*/
public class Counter implements Runnable {
Thread t;
int counter = 0; //dieser Zähler wird auf die Konsole geschrieben
/**
* Konstructor, welcher den Counter an einen Thread knüpft
*/
public Counter() {
this.t = new Thread(this);
t.setDaemon(true);
}
/**
* die eigentliche Aufgabe, welche von einem sleep unterbrochen wird.
*/
public void count() {
while (true) {
System.out.println(counter++);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void start() {
this.run();
}
@Override
public void run() {
this.count();
}
}
}