Java의 FX 응용 프로그램 스레드에 없음
이 자습서는 Java의 FX 응용 프로그램 스레드에 없음
오류를 보여줍니다.
Java의 FX 애플리케이션 스레드에 없음
Not on FX application thread
오류는 FX 스레드가 아니고 FX 스레드에서 호출해야 하는 스레드에서 메서드를 호출하려고 할 때 발생합니다. 이것은 이전 버전의 JavaFX에서는 문제가 되지 않았습니다.
JavaFX 8의 새로운 구현에서 발생합니다. 이 오류는 JavaFX 응용 프로그램의 다른 스레드에서 사용자 인터페이스를 변경할 때 발생합니다.
다음은 Not on FX application thread
오류를 발생시키는 예입니다.
Thread DemoThreadShow = new Thread(new Runnable() {
@Override
public void run() {
try {
newthread.setStyle("visibility: true");
Thread.sleep(10000);
Thread.interrupted();
} catch (Exception e) {
thread.setText("" + Integer.valueOf(thread.getText()) + 5);
newthread.setStyle("visibility: false");
}
}
});
DemoThreadShow.start();
위의 코드는 스레드를 만들고 해당 스레드에 몇 가지 메서드를 적용합니다. 이러한 메서드는 JavaFX 응용 프로그램에서 가져온 것입니다.
setText
메소드를 적용할 때 스레드 "Thread-5" java.lang.IllegalStateException의 예외: FX 애플리케이션 스레드에 없음; 오류가 발생합니다. currentThread = 스레드-5
.
이 문제를 해결하기 위해 코드를 다음과 같이 변경할 수 있습니다.
-
FX 어플리케이션 및 스레드 작업 중 UI를 변경하려면 다음 방법을 사용합니다.
Platform.runLater(() -> { // GUI STUFF }); or : Platform.runLater(new Runnable() { @Override public void run() { // GUI STUFF } });
-
Thread
대신Service
및Task
를 사용할 수도 있습니다.서비스
에는스레드
보다 더 많은 기능이 있습니다.작업 내에서 UI를 변경해도
FX 응용 프로그램 스레드에 없음
오류가 발생하지 않습니다. 다음은 이를 위해Service
및Task
를 사용하는 코드 예제입니다.Service New_Service = new Service() { @Override protected Task createTask() { return new Task() { @Override protected Object call() throws Exception { Platform.runLater(() -> { // GUI stuff here }); return null; } }; } }; New_Service.start();
위의 코드는 스레드보다 편리한 방법입니다.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook