2017-05-04 9 views
35

Swing을 사용하는 Java 응용 프로그램이 있지만 JavaFX로 마이그레이션하고 있습니다. 따라서 우리는 오래된 Swing 코드를 SwingNode s에 넣고 단계적으로 바꿉니다.GTKLookAndFeel을 사용하여 JavaFX에서 SwingNodes의 스타일을 고수하려고합니다.

이전하기 전에 Swing 응용 프로그램은 모양과 느낌 (0122)을 사용했습니다 (기본값은 Ubuntu에서). 다음 코드를 사용하여 코드를 설정했습니다 (사용 가능한 경우).

for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
    if (info.getClassName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) { 
    UIManager.setLookAndFeel(info.getClassName()); 
    } 
} 

이렇게하면 정상적으로 작동합니다. 그러나 JavaFX로 전환 한 후 UIManager.setLookAndFeel()을 호출하면 응용 프로그램이 정지되고 아무 반응이 없습니다. GTKLookAndFeel을 기반으로 JavaFX로 마이그레이션되지 않은 Swing 구성 요소의 스타일을 지정하기 때문에 룩앤필을 수동으로 설정해야합니다.

추가 정보 : javax.swing.plaf.metal.MetalLookAndFeel, javax.swing.plaf.nimbus.NimbusLookAndFeel 또는 com.sun.java.swing.plaf.motif.MotifLookAndFeel를 사용할 때 작동하기 때문에이 내용은, com.sun.java.swing.plaf.gtk.GTKLookAndFeel 작동하지 않습니다.

GTKLookAndFeel과 함께 작동하여 SwingNode에 스윙 구성 요소의 스타일을 지정하려면 어떻게해야합니까?

+1

는 올바른 스레드에서 그 일을하고 있습니까를? 스윙 코드는 [EventQueue.invokeLater] (http://docs.oracle.com/javase/8/docs/api/java/awt/EventQueue.html#invokeLater-java.lang.Runnable-)에서 실행해야합니다. – VGR

+0

@VGR : 이전에 그렇게하지 않았지만 지금 변경했지만 여전히 동작을 변경하지 않았습니다. 응용 프로그램을 정지시킵니다. –

+1

명령 줄에서 실행하고 모든 스레드 스택을 덤프하십시오. Windows에서는 Ctrl-Break를 사용하여이 작업을 수행합니다. 다른 시스템에서는 SIGQUIT가 그것을 할 것이며, Ctrl- \ 또는 별도의'kill -3' 명령으로 수행 할 것이다. 스택 추적 중 하나는 setLookAndFeel이 멈추는 위치를 나타냅니다. – VGR

답변

-1

GUI 구성 요소를 GUI 스레드로 업데이트해야합니다.

는 다음 중 하나를 시도해보십시오

SwingUtilities.invokeLater(() -> { 
//commands 
}); 

javafx.application.Platform.runLater(() -> { 
//commands 
}); 
+0

둘 다 시도한 후에 문제가 해결되지 않습니다. –