Это быстро запускаемое приложение, демонстрирующее, как обновить 2 отдельных текстовых пространства из фоновых потоков, как вы обязательно прочитали в комментариях, объясняющих, что происходит. Очевидно, что это не то же самое, что ваша программа, но я сохранил основную концепцию.
public class Main extends Application {
private AtomicInteger totalTickets = new AtomicInteger(100);
private boolean isSellingTickets = false;
@Override
public void start(Stage stage) {
VBox vBoxContainer = new VBox();
vBoxContainer.setAlignment(Pos.CENTER);
vBoxContainer.setPrefSize(400,250);
TextArea textAreaTop = new TextArea();
TextArea textAreaBottom = new TextArea();
vBoxContainer.getChildren().addAll(textAreaTop, textAreaBottom);
Button controlSalesButton = new Button("Start Ticket Sales");
controlSalesButton.setOnAction(event -> {
if(isSellingTickets) {
isSellingTickets = false;
controlSalesButton.setText("Start Ticket Sales");
}
else {
isSellingTickets = true;
//I didn't name these threads because I never reference them again
// of course create var name if you need them
new Thread(() -> sellTickets(textAreaTop)).start();
new Thread(() -> sellTickets(textAreaBottom)).start();
// This is on the main Thread so no need for Platform.runLater(...)
controlSalesButton.setText("Stop Ticket Sales");
}
});
vBoxContainer.getChildren().add(controlSalesButton);
stage.setScene(new Scene(vBoxContainer));
stage.show();
}
private void sellTickets(TextArea textArea){//This Whole Function is on another thread don't forget about that
while(isSellingTickets && totalTickets.get()>1) { //Continue selling tickets until you stop
// And Make Sure there is tickets to sell
//Platform.runLater(... is used to update the main thread by pushing updates to
// the JavaFX Application Thread at some unspecified time in the future.
Platform.runLater(() -> {
textArea.appendText("SOLD Ticket Number:" + (int) (Math.random() * 1000 + 1000) + " \t"
+ totalTickets.decrementAndGet() + " Left to sell\n");
});
try {
Thread.sleep((int) (Math.random() * 1000 + 100));//Different selling speeds this is irrelevant
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Если у вас есть какие-либо вопросы, дайте мне знать