2012-03-15 12 views
2

次のボタンでJlistで項目をランダムに検索できます。次のボタンをすばやく押すと例外が発生します。スレッド「スレッド7」の例外java.lang.ClassCastException:sun.java2d.NullSurfaceDataをsun.java2d.d3d.D3DSurfaceDataにキャストすることはできません 周波数次のトリガーをクリックすると、スレッドに何か問題があると言うことができますか? jlistには更新がありません。 Jlistは初期化され、開始時に要素で埋められ、次のボタンで項目をランダムに探します。 ensureIndexIsVisibleを削除しても問題はありません。私は要約コードの下に願っていますJlist ensureIndexIsVisibleは例外を発生させます

ができます:

public class B_Object { 
    private NewJFrame njf = new NewJFrame(); 
    HandlePlay hPlay = new HandlePlay(njf); 

    njf.nextButton.addActionListener(new java.awt.event.ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      playNext();     
     } 
    }); 
} 

public class HandlePlay { 
    private NewJFrame n_j_f; 
    HandlePlay(NewJFrame njf){ 
     n_j_f = njf; 
    } 
    private void setDisplay(int i) { 
     String str = "dummy"; 
     n_j_f.jList1.setSelectedIndex(i); 
     n_j_f.setTitle(str); 
     n_j_f.jTextArea1.setText(str); 
     n_j_f.jList1.ensureIndexIsVisible(n_j_f.jList1.getSelectedIndex()); 
    } 
} 
+4

あなたは[SSCCE](http://sscce.org/)で質問を編集してください.hmmm私は2つの理由を知っています – mKorbel

+0

理由は何ですか?あなたはそれらを教えてくれますか? – markAnthopins

+1

SSCCEはどこですか?投稿できますか? –

答えて

1

異なるスレッドをしようと、私はそれがEDTに関連しています見つかったイベントディスパッチスレッドを検索した後。修正以下のこの問題を解決するには十分です:

private void test(final int i) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      jList1.setSelectedIndex(i); 
      System.out.println("javax.swing.SwingUtilities.isEventDispatchThread()=" + javax.swing.SwingUtilities.isEventDispatchThread()); 
      jList1.ensureIndexIsVisible(i); 
     } 
    }); 
} 

だから、あなたは、このようなGUIの問題intermittenly破壊に対する持っている場合、あなたはEDTの中にその操作をやっているかどうかを確認、)isEventDispatchThread(でチェックすることを確認します。

関連する問題