如何使用GTK 3库运行JavaFX应用程序?

8
如何强制JavaFX应用程序使用GTK 3库?我知道SWT允许设置环境变量 SWT_GTK3 = 1以实现此目的。是否有任何类似的可能性/解决方法适用于JavaFX?
3个回答

12

新功能(8087516: Linux 上对 GTK 3 的条件支持)允许在 JavaFX 中使用 GTK v2 或 v3。默认值未更改:默认情况下使用 GTK 2。

通过设置以下属性来切换 GTK 版本:

// Output the version detected and used
-Djdk.gtk.verbose=true 

// Toggle the preferred version to GTK 3
-Djdk.gtk.version=3 

有关详细信息,请参阅OpenJDK邮件列表线程


之前的JavaFX版本使用了GTK2库。有关详细信息,请参见相关问题。现在JavaFX错误在以下位置:

最后一个问题有一个评论:

由于在同一应用程序中混合使用GTK2和GTK3会导致这个问题,因此我们可能需要提供两个本机库,一个用于GTK2,另一个用于GTK3。


1
我正在运行Azul JRE FX 1.8.0_272,显然默认设置已更改(或更有可能的是,存在某种自动检测)。 - schneida

0

这个问题没有简单的解决方案。JavaFX有自己的渲染框架。据我所知,它基于OpenGL并且不使用任何本地代码。如果没有这个,JavaFX将无法使用CSS和视觉效果来设计UI。

如果你真的需要这个功能,那么你必须编写自己的库,使用JavaFX场景图和其他工具来模拟Gtk3。但是这样做将无法访问本地组件。


我有一个非常简单的应用程序 - https://gist.github.com/ibuziuk/8351313。运行它并在终端中使用“sudo pldd [pid] | grep gtk”后,我得到了一个带有gtk2库的输出。我想要检查的是,JavaFX是否与gtk3兼容? - Ilya Buziuk
JavaFX使用Java,其中包含AWT,在某些平台上与GTK链接。这并不意味着您可以使用它创建JavaFX用户界面。 - Aaron Digulla
是的,但是有可能通过FXCanvas和JFXpanels将JavaFx组件嵌入到Swing/AWT/SWT组件中。它在gtk2上运行良好,但在gtk3上不行。因此,我已经向JavaFx团队创建了一个错误报告 - https://javafx-jira.kenai.com/browse/RT-35264。 - Ilya Buziuk

0
你最好的机会是与Java-Gnome团队交流。他们实现了一个库,使得编写具有GTK界面的Java应用程序成为可能。这应该是扩展支持JavaFX的可能性。http://java-gnome.sourceforge.net/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接