Java의 FX 응용 프로그램 스레드에 없음

Sheeraz Gul 2023년10월12일
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.

이 문제를 해결하기 위해 코드를 다음과 같이 변경할 수 있습니다.

  1. FX 어플리케이션 및 스레드 작업 중 UI를 변경하려면 다음 방법을 사용합니다.

    Platform.runLater(()
                          -> {
                              // GUI STUFF
                          });
    
    or :
    
        Platform.runLater(new Runnable() {
          @Override
          public void run() {
            // GUI STUFF
          }
        });
    
  1. Thread 대신 ServiceTask를 사용할 수도 있습니다. 서비스에는 스레드보다 더 많은 기능이 있습니다.

    작업 내에서 UI를 변경해도 FX 응용 프로그램 스레드에 없음 오류가 발생하지 않습니다. 다음은 이를 위해 ServiceTask를 사용하는 코드 예제입니다.

    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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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

관련 문장 - Java Thread

관련 문장 - Java Error