2

私は現在、JavaFX と Swing の両方を使用する中規模 (数万行の大まかな範囲) の Java プロジェクトをデバッグしようとしています。コードが正しいスレッドで呼び出されていません。これらの例外のスタック トレースは、ほとんどすべてが UI 描画スレッドから発生しているため、まったく役に立ちません。

さて、正しいスレッドで呼び出されていないものを見つけるまですべての UI 呼び出しをデバッグし、プロジェクト全体でそれを続けることができますが、それは信じられないほど長い作業になります。この種のデバッグを行う簡単な方法はありますか? たとえば、UI コードが適切なスレッドから呼び出されていない場合に、何らかの方法でデバッグ メッセージを出力したり、例外をスローしたりしますか?

4

2 に答える 2

3

JavaFX と Swing を同じスレッドで実行すると、スレッド化の問題を解決できる場合があります。

Java 8 には、JavaFX と Swing を同じスレッドで実行するための実験的な機能があります。

https://javafx-jira.kenai.com/browse/RT-30694 http://bugs.sun.com/view_bug.do?bug_id=8015477

-Djavafx.embed.singleThread=true実験的なシングル スレッド システムを有効にするためのコマンド ライン プロパティ設定だと思います。

実験的な機能現在の Java 8 ビルドで利用できるかどうかはわかりませんが、現在利用できる可能性があると思いますので、試してみてください。

実験的なシングル スレッド機能についてさらに詳しい情報が必要な場合は、openjfx-dev メーリング リストで開発者に問い合わせることができます。


Java 8 には、コードが正しいスレッドで実行されていない場合のレポートが組み込まれています。これは包括的ではありませんが、シングル スレッド オプションを使用していない場合でも、エラーの原因を特定するのに役立つ場合があります


Swing と JavaFX をマージする大規模なアプリケーションを実行している他のユーザーの中には、同様のデバッグが困難なスレッドの問題が報告されているため、これらのスレッドをチェックして、問題に同じ原因があるかどうかを確認できます。

于 2013-09-07T16:22:03.043 に答える
3

で Glass のスレッド チェックをオンにすることができます-Dglass.disableThreadChecks=false。これにより、OS レベル API の操作を担当する JavaFX の最下層のスレッド チェックが有効になります。ほとんどの通話は Glass で終了するため、ほとんどの場合、これらのチェックで十分です。これらのチェックは、デフォルトでまもなく有効になります。

于 2013-09-10T15:26:28.610 に答える