我的程序在程序启动时从给定目录中读取文件(每个文件包含一个对象),并将每个对象添加到Vector中。然后调用updateList(),逐个循环遍历每个对象,将它们的名称(String属性)添加到带有DefaultListModel的JList。
问题是,当程序启动时很少,列表显示为空。我已经执行了许多检查,例如获取列表模型报告的列表中的条目数,一切看起来都是正确的。
以前有人见过这个吗?我错过了一些重要的东西吗?
谢谢,下面的updateList():
private void updateList(){
for (int i=0; i < calculators.size(); i++){
listModel.addElement(calculators.get(i).getName());
}
}
答案 0 :(得分:1)
以前是否有人见过这个?
通常会发生随机错误,因为您没有在Event Dispatch Thread上更新Swing组件。有关详细信息,请阅读Concurrency上的Swing教程中的部分。
特别是在启动GUI时,您将使用invokeLater()方法。 Swing教程有很多例子。本教程使用的基本结构如下:
import java.awt.*;
import javax.swing.*;
public class SSCCE extends JPanel
{
public SSCCE()
{
add( new JLabel("Label") );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}