尝试使用GTKLookAndFeel在JavaFX中设置SwingNodes的样式会冻结应用程序

2022-08-31 22:36:52

我们有一个使用 Swing 的 Java 应用程序,但我们正在将其迁移到 JavaFX。因此,我们将旧的 Swing 代码包装成 s,并逐步替换它们。SwingNode

在迁移之前,Swing 应用程序用作外观(Ubuntu 上默认)。我们使用以下代码进行设置(如果可用):com.sun.java.swing.plaf.gtk.GTKLookAndFeel

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

这工作正常。然而,在切换到JavaFX之后,调用会冻结应用程序,并且没有任何反应。需要手动设置外观,因为我们仍希望基于 .UIManager.setLookAndFeel()GTKLookAndFeel

更多信息:这仅适用于com.sun.java.swing.plaf.gtk.GTKLookAndFeel,因为它在使用javax.swing.plaf.metal.MetalLookAndFeeljavax.swing.plaf.nimbus.NimbusLookAndFeelcom.sun.java.swing.plaf.motif.MotifLookAndFeel时工作。

我们可以做些什么来使它在s中设置我们的Swing组件的样式?GTKLookAndFeelSwingNode


答案 1

GUI 组件需要更新为 GUI 线程。

请尝试以下操作之一:

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

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

答案 2

推荐