小编Dri*_*mux的帖子

迁移到提供RuntimeException的JDK 11 + JavaFX 11

我在Java 8 + JavaFX上有一个要迁移到Java 11的应用程序。其基本目的是为网络上的用户提供.jar,以便他们可以使用此小应用程序。我将JavaFX用于接口,并使用sqlite-jdbc生成数据库。

我有我的module-info.java,编译似乎正常:没有错误。但是,如果我运行该应用程序,则会出现以下错误:

Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-11

11
推荐指数
1
解决办法
5271
查看次数

Java SystemTray图标并不总是有效

我需要你的帮助:我正在研究一个小的Java应用程序(Java版本7),它必须最小化到系统托盘中.

我正在使用Class SystemTray,使用SystemTray.isSupported(),然后

SystemTray systemTray = SystemTray.getSystemTray();
ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("icon.png"));
Run Code Online (Sandbox Code Playgroud)

[...]

systemTray.add(trayIcon);
Run Code Online (Sandbox Code Playgroud)

(当然有弹出窗口)

在Windows上,它运行良好.在XFCE,Xubuntu,没问题,图标正在使用弹出窗口.但是在KDE和Gnome shell上......它不起作用.

KDE(4.14.1)

(Qt:4.8.6工具等离子:4.11.12)

SystemTray.isSupported()= true,当程序到达该行时:systemTray.add(trayIcon); 捕获异常:

托盘进程中出错:java.awt.AWTException:无法显示TrayIcon.

因此,图标是白色的,当用户点击它时不起作用,没有弹出窗口.

Gnome Shell(3.12.2)

SystemTray.isSupported()= true,图标位于底部的通知区域,但鼠标事件不起作用...

为了解决这些问题,我认为SWT可能是一个好主意.但是当我实现它(上一个版本)时,我收到了这个警告:

警告**:无法连接到辅助功能总线:无法连接到socket/tmp/[...]

它不起作用......编辑:不再了,我可以用外部类修复SWT的问题.警告不是由SWT引起的,而是环境系统引起的(我和终端中的其他应用程序有相同的警告).


那么现在,我该怎么办?我想用&检查环境系统,然后启用或禁用系统托盘,如果它是KDE或Gnome 3 ...但是这个解决方案不是很好,因为它是多平台的本地解决方案(在操作系统的功能中我的意思),而不是全局解决方案(适用于所有操作系统的一种方法)......System.getenv("XDG_CURRENT_DESKTOP")System.getenv("GDMSESSION")

那么,其他想法呢?我不知道......有没有办法将嵌入式JWindow定义到系统托盘中?

java kde system-tray gnome-shell

8
推荐指数
1
解决办法
1711
查看次数

标签 统计

java ×2

gnome-shell ×1

javafx ×1

javafx-11 ×1

kde ×1

system-tray ×1