4

Java Swing クライアント アプリケーションがあります。これは、Java Web Start アプレットおよび install4j インストーラーとしてインストールされます。
Apple が最新の Java 6 アップグレードをリリースしたため、Installer と 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)

Apple の最新の更新情報へのリンク:
http://support.apple.com/kb/HT5797

リリースノートによると:

Java 1.6.0_45 には複数の脆弱性が存在し、最も深刻な脆弱性により、信頼されていない Java アプレットが Java サンドボックスの外部で任意のコードを実行できる可能性があります。悪意を持って作成された信頼できない Java アプレットを含む Web ページにアクセスすると、現在のユーザーの権限で任意のコードが実行される可能性があります。これらの問題は、Java バージョン 1.6.0_51 に更新することで解決されました。

4

5 に答える 5

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

https://stackoverflow.com/a/17226346/2507292でこれに答えました。 短い形式は、Swing スレッドで実行されるように、UIManager.setLookAndFeel への呼び出しをラップする必要があるということです。JavaDoc で「スレッドセーフ」とラベル付けされていないすべての Swing メソッドは、そのスレッドで実行する必要があります。以前のバージョンの Java は、それをしなければ壊れないように見えました。プログラムの開始時に一度ルック アンド フィールを設定するときに、それについて考えないのは簡単です。より厳密な方法は他にもあるかもしれませんが、これが私たちを悩ませた方法です。

于 2013-06-21T01:36:21.730 に答える
1

私の経験は、Mike C のものと一致しているようです。ただし、UIManager への参照はアプリケーションを壊すように見えることがわかりました。具体的には、UIManager (さまざまなオプションを構成するために Quaqua によって使用される) にプロパティを追加すると、UIManager を介してルック アンド フィールを設定する場合と同様に、UIManager が壊れます。

(ソース: 私は Buddi ( http://buddi.digitalcave.ca ) の作成者であり、今日、この問題を報告しているユーザーから複数のバグ レポートを受け取り始めました。オプションで UIManager へのすべての参照を無効にするフラグを追加することで、 Mac の素敵な外観はすべて失われますが、再び動作するようになりました. 願わくば、Apple がこれに対する修正をすぐにリリースしてくれることを願っています...)

編集:シドニーに感謝します。その提案はうまくいきました。非常に高く評価!

于 2013-06-21T02:42:56.210 に答える