Jlist ensureIndexIsVisible导致异常
问题描述:
我可以通过下一个按钮在Jlist中随机搜索项目。当我快速按下一个按钮时,出现异常:线程“Thread-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());
}
}
答
尝试不同的主题和搜索事件调度线程我发现它与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检查()。
请用[SSCCE](http://sscce.org/)编辑你的问题,嗯,我知道两个理由 – mKorbel 2012-03-15 19:51:33
是什么原因?你能告诉他们吗? – markAnthopins 2012-03-15 20:48:42
SSCCE在哪里?你可以发布吗? – 2012-03-15 21:00:41