Я полностью осознаю, что об этом уже спрашивали, но моя проблема заключается в как вызвать эту конкретную функцию.Итак, позвольте мне представить основную проблему: я должен сделать журнал для добавления клиентов в очереди.
Я пробовал несколько версий методов, которые имеют runnables и Platform.runLater (...), чтобырешить эту проблему, но он обновляет журнал только после завершения процесса.Так как эти методы работали для других людей, я начинаю думать, что использую их неправильно.Вот что я написал:
Здесь я объявил пользовательский интерфейс и использовал панель, в которой класс
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Scheduler.border.setCenter(Scheduler.scroll);
Scene scene = new Scene(Scheduler.border, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
Scheduler scheduler = new Scheduler();
scheduler.run();
}
public static void main(String[] args) {
launch(args);
}
}
Runnable.Он отображается в консоли каждую секунду, а графический интерфейс - через 10 секунд.Второй метод - это тот, который должен решить мою проблему: создание потока FX, позволяющего мне изменять пользовательский интерфейс.И это происходит, но не в то время.
class Scheduler implements Runnable{
private static final int numberQueues = 3;
static final int serviceTime = 10;
static volatile int currentTime;
public static BorderPane border = new BorderPane();
public static Pane scroll = new Pane();
public static TextArea logList = new TextArea(" Starting Logs...\n");
public Scheduler() {currentTime = 0;}
@Override
public void run() {
while (serviceTime > currentTime) {
currentTime += 1;
try {
writeToActivityLog(currentTime + " | Customer at queue" + currentTime % numberQueues);
System.out.println(currentTime + " | Customer at queue" + currentTime % numberQueues);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static public void writeToActivityLog(String logEntry){
class Threade implements Runnable {
private String logEntry;
private Threade(String logEntry){
this.logEntry = logEntry;
}
@Override
public void run() {
logList.appendText(logEntry);
scroll.getChildren().removeAll();
scroll.getChildren().addAll(logList);
}
}
String updatedLog = logList.getText()+ logEntry;
Threade thread = new Threade(updatedLog);
Platform.runLater(thread);
}
}
Итак, как я уже говорил ранее, я хочу, чтобы журналы генерировались по мере выполнения потоков, а не только после их завершения.Но это единственный способ получить их.Кроме того, окно замирает, оно щелкает во время процесса потока, но это нормально после завершения потоков.