4

我们有一个 Java Swing 客户端应用程序。它作为 Java Web Start 小程序和 install4j 安装程序安装。
由于 Apple 发布了最新的 Java 6 升级,我们的应用程序在安装程序和 Web Start 版本都显示登录对话框后立即卡住。我们禁用了对话框,应用程序在启动后仍然卡住了。我们还尝试使用不同的外观和感觉,因为有一些报告说这解决了问题,但没有帮助。
我们目前怀疑这是此版本 JRE 中与 Swing 相关的某种错误。
我们在 Oracle 的 1.7.0_25 JRE 上没有这个问题。

我们知道这个更新引起了很多问题,有没有人找到解决这个问题的方法?

这是 EDT 线程堆栈跟踪的最后一部分:

"AWT-EventQueue-1" prio=8 tid=000000002a1abc00 nid=0xb1d3f000 in Object.wait() [00000000b1d3d000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at java.awt.EventQueue.getNextEvent(EventQueue.java:558)
    - locked <000000000686af80> (a java.awt.EventQueue)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:263)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:205)
    at java.awt.Dialog$1.run(Dialog.java:1049)
    at java.awt.Dialog$3.run(Dialog.java:1101)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Dialog.show(Dialog.java:1099)
    at java.awt.Component.show(Component.java:1615)
    at java.awt.Component.setVisible(Component.java:1567)
    at java.awt.Window.setVisible(Window.java:843)
    at java.awt.Dialog.setVisible(Dialog.java:984)

苹果最新更新信息链接:http:
//support.apple.com/kb/HT5797

根据发行说明:

Java 1.6.0_45 中存在多个漏洞,其中最严重的漏洞可能允许不受信任的 Java 小程序在 Java 沙箱之外执行任意代码。访问包含恶意制作的不受信任的 Java 小程序的网页可能会导致以当前用户的权限执行任意代码。这些问题已通过更新到 Java 版本 1.6.0_51 得到解决

4

5 回答 5

2

此问题已通过 Apple 发布这些更新的修订版得到解决:http: //support.apple.com/kb/DL1572 (10.7, 10.8+) http://support.apple.com/kb/DL1573 (10.6-只要)

于 2013-06-21T19:52:03.143 回答
2

我注意到在某些情况下1.6.0_51暴露了我缺少的依赖jnlp项。这些错误在以前的版本中不明显,可能是由于延迟加载。作为一个具体的例子,我的演示jnlp的本地副本包括众所周知的依赖项,并且. GUI 注意到由于缺少. 在另一种情况下,一次失踪无声无息地失败了。由于缺乏对 中修复的漏洞的详细了解,更严格的依赖检查可能是一个合理的假设。 jfreechart-1.0.14.jarjcommon-1.0.17.jarjavawsiText-2.1.5.jarcommons-math-2.2.jar1.6.0_51

于 2013-06-20T11:01:55.557 回答
1

我的经历似乎与 Mike C 的一致;但是我发现对 UIManager 的任何引用似乎都会破坏应用程序。具体来说,向 UIManager 添加任何属性(Quaqua 用来配置各种选项)都会破坏它,通过 UIManager 设置任何外观和感觉也会破坏它。

(来源:我是 Buddi ( http://buddi.digitalcave.ca ) 的作者,今天我开始收到来自用户报告此问题的多个错误报告。通过添加一个标志来选择性地禁用对 UIManager 的所有引用,我有让它再次工作,尽管失去了所有漂亮的 Mac 外观。希望 Apple 会尽快发布修复程序......)

编辑:谢谢西德尼,这个建议奏效了。非常感谢!

于 2013-06-21T02:42:56.210 回答
1

我在https://stackoverflow.com/a/17226346/2507292上回答了这个问题 简短的形式是您必须将调用包装起来 UIManager.setLookAndFeel 以便它在 Swing 线程中运行。所有在其 JavaDoc 中未标记为“线程安全”的 Swing 方法都必须在该线程中运行。如果您不这样做,以前的 Java 版本似乎不会中断,并且在程序开始时设置外观时很容易不考虑它。可能还有其他更严格的方法,但这是咬我们的方法。

于 2013-06-21T01:36:21.730 回答
0

在我们的例子中,我们能够通过删除这一行将我们的应用程序恢复到工作状态:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
于 2013-06-20T23:02:15.347 回答