【发布时间】:2015-05-29 15:19:31
【问题描述】:
我们有一个主要在java 1.7 开发并在1.8 测试的javafx 应用程序。在java 1.8u35 之前它运行良好。现在我们发现,JavaFx 窗口在升级后不会在1.8u40 中打开。更糟糕的是,模态窗口阻止了整个选项卡/浏览器的使用。因此用户只需使用任务管理器关闭浏览器即可。
我们使用javafx.embed.swing.JFXPanel 将 jfx-code 嵌入到 swing 遗留代码中。
我完全不知道可能是什么问题,因为客户端的 java 控制台中没有显示错误。
更新:
我查看了java1.8 here 的已知问题列表。我唯一可能会链接到我们的问题的是这个错误:
BUG-RT-32597:SwingNode 类不支持高 DPI 显示。
所以我尝试降低屏幕分辨率(1280x1024 到 800x600)但没有成功。
以前有没有人遇到过类似的问题并且知道有什么帮助?
更新:
我试图更好地找出问题所在,但运气不佳。 为了让它更明显,这基本上是窗口加载时发生的事情:
public static void initWindow(JDialog dialog){
final JFXPanel jfx = new JFXPanel();
Platform.runLater(new Runnable() {
public void run() {
System.out.println("JFXPanel");
}
});
Runnable r = new Runnable() {
public void run() {
AnchorPane root = new AnchorPane;
//... do some content loading
Scene scene = new Scene(root,width,height);
System.out.println("test");
}
};
dialog.add(jfx);
System.out.println("added jfx panel.");
dialog.pack();
System.out.println("packed jfx panel.");
dialog.setLocationRelativeTo(null);
System.out.println("loaded.");
}
我以为执行会在某个地方停止,但它像往常一样贯穿整个函数。然而,窗口没有出现。
更新:
不完全正确,我发现的最后一条评论:
围绕上述函数,会发生以下情况:
initWindow(this); //this is extending java.swing.JDialog
System.out.println("this comment is printed to console");
super.setVisible(true); //this is not executed properly. if removed, browser will not be blocked, but window doesnt show up either
System.out.println("this comment is not printed to console";
所以,一般来说,JDialog 包含一个 JfxPanel。从 JDialog 类调用 setVisible() 方法时,应用程序被阻止但窗口不显示。实际上,在缩略图屏幕 (alt+tab) 中,它显示为应用程序内的容器。
删除 setVisible 调用时,浏览器不会被阻止,但窗口也不会显示。不幸的是,我没有找到 JDialog 类代码来查找,setVisible() 里面发生了什么。
任何想法,我们的设置或 setVisible 方法可能有什么问题?
【问题讨论】: