1

Javaスイングに問題があります。私は時々このNullPointerExceptionをランダムな時間に取得します(おそらくいくつかのペイント方法で?):(プロジェクトには10​​0を超えるクラスがあるため、ここにコードを投稿しても意味がありません。さらに、この種のexcpを見つけるための正しいアプローチに興味があります.それは私のソースコードにはありません)

スレッド「AWT-EventQueue-0」での例外javax.swing.plaf.basic.BasicTextUI.paint(不明なソース) javax.swing.plaf.basic.BasicTextUI.update(不明なソース)でjavax.swing.JComponent.paintComponent(不明なソース)でjavax.swing.JComponent. javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(不明なソース) の javax.swing.JComponent.paintToOffscreen(不明なソース) の javax.swing.RepaintManager$PaintManager.paint(不明なソース) の javax.swing.swing でのペイント(不明なソース)。 javax.swing.JComponent の RepaintManager.paint(不明なソース)。javax.swing.JComponent の_paintImmediately(不明なソース)。javax.swing.RepaintManager.paintDirtyRegions の paintImmediately(不明なソース) javax.swing.RepaintManager.paintDirtyRegions の(不明なソース) javax.swing.RepaintManager.seqPaintDirtyRegions の(不明なソース) javax.swing.SystemEventQueueUtilities$ComponentWorkRequest の。 java.awt.event.InvocationEvent.dispatch で実行 (不明なソース) java.awt.EventQueue.dispatchEventImpl (不明なソース) java.awt.EventQueue.access$000 で (不明なソース) java.awt.EventQueue でjava.awt.EventQueue で $1.run(未知のソース) $1.run(未知のソース) java.security.AccessController.doPrivileged(ネイティブ メソッド) で java.security.AccessControlContext$1.doIntersectionPrivilege(未知のソース) で java.awt. java.awt の EventQueue.dispatchEvent(不明なソース)。java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) の java.awt.EventDispatchThread.pumpEventsForHierarchy(不明なソース) の EventDispatchThread.pumpOneEventForFilters(不明なソース) java.awt.EventDispatchThread の java.awt.EventDispatchThread.pumpEvents(不明なソース)。 java.awt.EventDispatchThread.run(不明なソース) での pumpEvents(不明なソース)

今私の質問は、どのように/どこで検索を開始すればよいですか? この例外の理由がわかりません。が表示されます。例外。ランダムに発生するため、見つけるのも難しくなります。

それで、誰かがどこから始めるべきか考えていますか(または、おそらく私が原因ではないスイングの問題です)?

4

2 に答える 2

3

エラーが時々発生し、それが Swing に関連している場合、私の最初の推測は常に Swing スレッドの問題です。たとえば、別のスレッドでの Swing コンポーネントの変更またはアクセス、次に EDT です。Swing はスレッド セーフではないため、EDT で例外が発生する可能性があります (詳細については、Swing の同時実行チュートリアルを参照してください)。

この記事RepaintManagerで説明されているように、Swing スレッド化違反をチェックするための良い開始点は、カスタム をインストールすることです。

関連する質問に対する回答で、より多くのアプローチについて概説しました。

于 2012-07-25T08:53:04.583 に答える
2

どのコンポーネントが例外を発生させるかを判断する際に問題がある場合は、Eclipse に ExceptionBreakpoint を配置し、例外が発生したときにコール スタックを分析します。

これは問題の特定に役立ちますが、私はこの手法を Java EE コンテキストで使用しています。Swing コンテキストに適用できるかどうかはわかりません。

于 2012-07-25T08:36:23.757 に答える