0

私はスイングアプリケーションに取り組んでいます。すべてうまくいっているようですが、最近GUIでいくつかの問題に直面しています。問題は、別の JinternalFrame を開くと正常に動作することですが、もう一度開くと、子の JintenalFrame が制御を失い、レイアウトが失われるか、破壊される可能性があります。問題を明確に説明する写真がいくつかあります。

ここに画像の説明を入力

これが最初の JinternalFrame で、更新ボタンをクリックすると、2 番目のフレームがその中に表示されます。

ここに画像の説明を入力

しかし、2番目のものを閉じて再度開くと、問題は次のように表示されます。 ここに画像の説明を入力

そして、IDE は NPE メンションをトリガーします。

Hibernate: select modalite0_.id_mod as id1_6_, modalite0_.libele as libele6_ from   
Modalite modalite0_
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JTable.prepareRenderer(JTable.java:5735)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JViewport.paint(JViewport.java:731)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)

それで、このエラーを追跡する方法があるかどうか尋ねていますか?

jre 7のideとしてNetbeans7.2を使用しています。

4

1 に答える 1

3

@ザカリア・マラ

  • JDialogポップアップ ウィンドウ用に作成、 JDialogJVM インスタンス全体に 1 つだけJDialog.setDefaultCloseOperations(HIDE_ON_CLOSE)

  • JPanelすべてを入れ子にした作成JComponents

  • への追加/初期XxxTableModel化、間違ったコード化されたレンダラー、およびすべてのハードコード化されたリンク、キャスト、値の比較のJTable原因となる空のモデルを使用し、渡された場合にモデルにデータが含まれているかどうかをテストする必要があり、レンダラーで何でも機能しますexceptionsprepareRendererprepareRenderer

  • 間違ってコード化さrendererれ、EDT からの更新と一緒に、ハードコード化さprepareRendererれたすべてのリンク、キャスト、値の比較、


  • これで、visibily forJDialogとそのコンテンツだけで遊ぶことができます

  • 隠すJDialog,

  • CardLayoutビュー、セット、適切なカードへの切り替えが少ない場合に使用します。

  • (s)からすべての値を削除するか、 (s)JComponentからすべてのデータを削除します。model

  • オブジェクトのリセット、再初期化、または再作成を決して行わず、

  • 外部ソースからのデータに使用し、使用しSwingWorkerてリッスンし、テストする必要があり、done() でチェックする必要がありますPropertyChangeListenerexceptions by using get()

  • 値を設定する (またはバッチでprocess,を使用するpublish) でdone()JComponentそのmodels

  • 次に を呼び出しJDialog.pack()、 でJDialog画面上の適切な座標 ( を基準にしてJComponents) にPoint移動しJDialoginvokeLater(required)


  • プロダクション コードで を使用しRunnable#Threadますが、Swing GUI へのすべての出力を にラップする必要がありinvokeLaterます。Swing as thread safe
于 2013-03-15T13:43:51.957 に答える