これは私の会社のアプリケーションで本当に本当に本当に本当に奇妙な問題です。私はできる限り最善の方法でこれを説明しようとしています。Java 8、Swing、およびOSX:ダイアログでUIがマウスに反応しなくなる
まず、これはSwing UIを備えたレガシーアプリケーションです。
第2に、この問題は、Java 8を使用して実行された&コンパイル時にのみ発生します.Java 7以降では、これは発生しません。
問題:ダイアログが表示されている(モーダルでも非モーダルでも関係ありません)場合、UIはマウスのクリックに対して反応しなくなります。 UIが凍結されていないのは本当に狂ったことです。何かの上にマウスを置くと、ホバーのハイライトが正常になります。キーボードコマンドは完全に受信されます。ただし、マウスのクリックは機能しません。
これはOSXでも発生します。 WindowsとLinuxにはこの問題はありません。私はこれをOSX El Capitanで実行しています。
コードサンプルまでは、アプリケーション全体のすべてのダイアログに影響します。 JOptionPanes & JDialogsは重要ではないようです。ここでは、簡単なJOptionPaneの宣言があります:
int n = JOptionPane.showOptionDialog(mcContext.getMapperView(), "xPath of dropping target can't be evaluated" +
"\nPlease, select xPath for dropped node",
"xPath calculation for dropped node",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
このコードはEventThreadに呼び出されているので、私はそれがスレッドの問題だとは思いません。
私はこれの原因について完全に困惑しています。これまではJava 7でコンパイルして実行することで無視してきましたが、バージョンが進むにつれてこの問題をより直接的に処理する必要があります。
誰もが考えている?
編集:SSCCEアイデアをありがとう。今私はこれまで以上に混乱しています。クイックフレーム/ダイアログのデモをまとめると、完全に機能しました。問題ありません。だから私はそれが原因である可能性のあるアプリケーションに何があるのか分からない。探し始めるのに良い場所は?
編集2:SwingUtilities.invokeLaterの宣言のうちの1つをラップし、それが機能しました。 Ok ...今、何が原因でしょうか? Java 8がJava 7とは違ってコンパイルされていることが必要です。
編集3:より奇妙な動作です。 IDEを実行していたアプリケーションとは別の「デスクトップ」に移動し、バグのダイアログが表示されたら、そのデスクトップに切り替えることはできません。私は現在のデスクトップ上の任意のアプリケーションに切り替えることができますが、別のデスクトップには切り替えることはできません。
編集4:問題のダイアログがドラッグアンドドロップ操作によってトリガーされています。それが役立つかどうかはわかりませんが、sun.lwawt.macosx.CDragSourceContextPeerクラスを使用してスレッドダンプにバックグラウンドでスレッドがあることがわかります。
SSCCE(シンプル、自己完結型、コンパイル可能な例)を書くことができますか? – fge
関連するログ/スタックトレース(Javaと多分Macコンソールの両方)? – Mena
ログ/スタックトレースでは、例外がスローされず、アプリケーションのログ出力には何も問題がないかのように正常に出力されます。 SSCCEについては、私ができることを見ていきます。 – user2223059