我們有一個使用Swing的Java應用程序,但我們正在將它遷移到JavaFX。因此,我們將舊的Swing代碼包裝成SwingNode
s,並逐步替換它們。嘗試使用GTKLookAndFeel設置JavaFX中的SwingNode的樣式凍結應用程序
在遷移之前,Swing應用程序使用com.sun.java.swing.plaf.gtk.GTKLookAndFeel
作爲外觀(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組件,所以需要手動設置外觀。
進一步信息:這只是不com.sun.java.swing.plaf.gtk.GTKLookAndFeel
工作,因爲它使用javax.swing.plaf.metal.MetalLookAndFeel
,javax.swing.plaf.nimbus.NimbusLookAndFeel
或com.sun.java.swing.plaf.motif.MotifLookAndFeel
時工作。
我們可以做些什麼來使它與GTKLookAndFeel
一起使用來設計我們在SwingNode
中的Swing組件?
你在正確的線程做什麼呢? Swing代碼需要在[EventQueue.invokeLater](http://docs.oracle.com/javase/8/docs/api/java/awt/EventQueue.html#invokeLater-java.lang.Runnable-)中運行。 – VGR
@VGR:之前沒有這樣做,現在改變了它,但仍然沒有改變行爲。仍凍結應用程序。 –
嘗試在命令行上運行它,並轉儲所有線程堆棧。在Windows上,這是通過Ctrl-Break完成的;在其他系統上,SIGQUIT可以完成,使用Ctrl- \或單獨的'kill -3'命令完成。其中一個堆棧軌跡應指示setLookAndFeel卡在哪裏。 – VGR