"sun.awt.exception.handler"プロパティを設定する必要があるのはなぜですか?

ネイサン・ヒューズ:

以下は、イベントディスパッチスレッドでスローされた例外をキャッチするコードです。

package com.ndh.swingjunk;

import java.awt.EventQueue;

import javax.swing.JFrame;

public class EntryPoint {

    public static void main(String[] args) {
        Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
//      System.setProperty("sun.awt.exception.handler", MyExceptionHandler.class.getName());

        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                new SomeWindow("foo").setVisible(true);
            }
        });
    }
}

class SomeWindow extends JFrame {
    public SomeWindow(String title) {
        this.setTitle(title);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        throw new RuntimeException("hello");
    }
}

イベントディスパッチスレッドでスローされた例外がUncaughtExceptionHandlerで処理されないという警告を見てきましたが、私の例ではそうではありません。登録行がコメント化されていても、残されていても同じように機能します。私の例はなんとなくめちゃくちゃですか、それとも例外ハンドラをsun.awt.exception.handler不要に登録していますか?

jfpoilpret:

EDTのクラス(java.awt.EventDispatchThreadこのクラスは、javadocのそれを見ていないプライベートパッケージが)AWTの起源以来、多くのことを変更しました。

ではJDK6、あなたは、このクラスが正しくEDT内occuring例外を処理できることがわかります。現在のバージョンでは、例外処理は少し複雑です。

  • sun.awt.exception.handlerプロパティを設定した場合、ハンドラーは、EDT内で呼び出された開発者のコ​​ードによってスローされたすべての例外に対して呼び出されます(以前のJDKバージョンとの互換性が保証されます)。
  • そうしないと、例外が再スローされ、現在のEDTが停止UncaughtExceptionHandlerし、スニペットが示すように、デフォルトでそれをキャッチできます。

しかし(これは非常に重要です)、EDTのコードを注意深く見ると、モーダルダイアログが表示されているときにEDTで例外が発生すると、このメカニズムが機能しないことがわかります(これはEDTが原因だと思います)そしてEventQueue管理はかなり複雑であり、私はあえて " 乱雑 " と言ってもいいでしょう:多くのコードはハックのように見えます)。

この正確な状況でSystem.errは、sun.awt.exception.handlerプロパティを設定した場合を除いて、例外はに記録されます。デフォルトUncaughtExceptionHandler持つことは役に立ちません。

つまり、アプリケーションがモーダルダイアログを使用していないことを確認できる場合(ただし、ダイアログもモーダルであることを忘れないでください)を除いてsun.awt.exception.handlerプロパティを気にする必要がありますJOptionPane

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CALayerのcontentsScaleプロパティを設定する必要があるのはいつですか?

分類Dev

最大および最小の幅/高さのcssプロパティの設定を解除するには、異なる値が必要なのはなぜですか?

分類Dev

プロパティのプロパティを設定すると、プロパティで「didset」が呼び出されるのはなぜですか?

分類Dev

HTML DOMプロパティをHTML DOM属性にも反映する必要があるのはなぜですか?

分類Dev

Bootstrapがline-heightプロパティを1.428571429に設定するのはなぜですか?

分類Dev

ビュープロパティを変数に割り当てる必要があるのはなぜですか?

分類Dev

プロパティoriginでInvalidValueError:が発生するのはなぜですか:location、placeId、またはクエリエラーのいずれかを角度で設定する必要がありますか?

分類Dev

iOSなぜこのプロパティは強力である必要があるのですか

分類Dev

あるプロパティを指定するには、別のプロパティも設定する必要がありますか?

分類Dev

Typescriptで、読み取り専用として定義されているクラスのプロパティを設定する必要があるのはなぜですか?

分類Dev

RETSデータフィードでプロパティのタイトルを設定するには、どの列を使用する必要がありますか?

分類Dev

空のセルを残すために、grid-areaプロパティをすべてのhtml要素に設定する必要があるのはなぜですか?

分類Dev

このアニメート可能なプロパティが再度設定されるのはなぜですか?

分類Dev

プロパティを明示的に設定する必要がありますか?

分類Dev

Vue.js 3で、refでvalueプロパティを使用する必要があるのに、reactiveでは使用しないのはなぜですか?

分類Dev

Typescriptでgetterプロパティの値を設定できるのはなぜですか?

分類Dev

これがjavascriptの予約語である場合、プロパティとして設定できるのはなぜですか?

分類Dev

DefaultForbidSchemeを設定する必要があるのはなぜですか

分類Dev

VNC用にSSHを設定する必要があるのはなぜですか?

分類Dev

なぜプロトタイプコンストラクタを設定する必要があるのですか?

分類Dev

設定プロパティ値を読み取ると、SettingsPropertyValueオブジェクトがダーティになるのはなぜですか?

分類Dev

動的プロパティに__get()を使用するオブジェクトが__isset()も実装する必要があるのはなぜですか?

分類Dev

クラスプロパティをPHPで設定する必要があるのはいつですか?コンストラクターで設定する必要がありますか?

分類Dev

変更される唯一のプロパティにsetStateを設定する必要がありますか?

分類Dev

mysql testcontainersを実行するためにjdbc接続プロパティが必要なのはなぜですか?

分類Dev

ナビゲーションプロパティはEFCoreで明示的に設定する必要がありますか?

分類Dev

javascript:表示プロパティを変更するために2回クリックする必要があるのはなぜですか?

分類Dev

ConnectionStringで最小プールサイズを設定する必要があるのはなぜですか

分類Dev

SVGのスタイルを設定するときに「x」がCSSプロパティとして機能するのはなぜですか?

Related 関連記事

  1. 1

    CALayerのcontentsScaleプロパティを設定する必要があるのはいつですか?

  2. 2

    最大および最小の幅/高さのcssプロパティの設定を解除するには、異なる値が必要なのはなぜですか?

  3. 3

    プロパティのプロパティを設定すると、プロパティで「didset」が呼び出されるのはなぜですか?

  4. 4

    HTML DOMプロパティをHTML DOM属性にも反映する必要があるのはなぜですか?

  5. 5

    Bootstrapがline-heightプロパティを1.428571429に設定するのはなぜですか?

  6. 6

    ビュープロパティを変数に割り当てる必要があるのはなぜですか?

  7. 7

    プロパティoriginでInvalidValueError:が発生するのはなぜですか:location、placeId、またはクエリエラーのいずれかを角度で設定する必要がありますか?

  8. 8

    iOSなぜこのプロパティは強力である必要があるのですか

  9. 9

    あるプロパティを指定するには、別のプロパティも設定する必要がありますか?

  10. 10

    Typescriptで、読み取り専用として定義されているクラスのプロパティを設定する必要があるのはなぜですか?

  11. 11

    RETSデータフィードでプロパティのタイトルを設定するには、どの列を使用する必要がありますか?

  12. 12

    空のセルを残すために、grid-areaプロパティをすべてのhtml要素に設定する必要があるのはなぜですか?

  13. 13

    このアニメート可能なプロパティが再度設定されるのはなぜですか?

  14. 14

    プロパティを明示的に設定する必要がありますか?

  15. 15

    Vue.js 3で、refでvalueプロパティを使用する必要があるのに、reactiveでは使用しないのはなぜですか?

  16. 16

    Typescriptでgetterプロパティの値を設定できるのはなぜですか?

  17. 17

    これがjavascriptの予約語である場合、プロパティとして設定できるのはなぜですか?

  18. 18

    DefaultForbidSchemeを設定する必要があるのはなぜですか

  19. 19

    VNC用にSSHを設定する必要があるのはなぜですか?

  20. 20

    なぜプロトタイプコンストラクタを設定する必要があるのですか?

  21. 21

    設定プロパティ値を読み取ると、SettingsPropertyValueオブジェクトがダーティになるのはなぜですか?

  22. 22

    動的プロパティに__get()を使用するオブジェクトが__isset()も実装する必要があるのはなぜですか?

  23. 23

    クラスプロパティをPHPで設定する必要があるのはいつですか?コンストラクターで設定する必要がありますか?

  24. 24

    変更される唯一のプロパティにsetStateを設定する必要がありますか?

  25. 25

    mysql testcontainersを実行するためにjdbc接続プロパティが必要なのはなぜですか?

  26. 26

    ナビゲーションプロパティはEFCoreで明示的に設定する必要がありますか?

  27. 27

    javascript:表示プロパティを変更するために2回クリックする必要があるのはなぜですか?

  28. 28

    ConnectionStringで最小プールサイズを設定する必要があるのはなぜですか

  29. 29

    SVGのスタイルを設定するときに「x」がCSSプロパティとして機能するのはなぜですか?

ホットタグ

アーカイブ