我可以使用下一个按钮在Jlist中随机搜索项目。当我快速按下下一个按钮时,我得到异常:线程“Thread-7”中的异常java.lang.ClassCastException:sun.java2d.NullSurfaceData无法强制转换为sun.java2d.d3d.D3DSurfaceData 因此,由于点击下一个频率触发了这个问题,我们可以说线程有问题吗?作为注释,jlist中没有更新。 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());
}
}
答案 0 :(得分: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问题,请确保你是否在EDT中进行了这项操作,并通过isEventDispatchThread()进行检查。