1

我的程序在程序启动时从给定目录中读取文件(每个都包含一个对象),并将每个对象添加到 Vector。然后调用 updateList() 循环遍历这些对象中的每一个,将它们的名称(字符串属性)添加到具有 DefaultListModel 的 JList 中。

问题是,当程序启动时,列表很少显示为空。我已经执行了许多检查,例如获取列表模型报告的列表中的条目数,并且一切似乎都是正确的。

有人见过这个吗?我在这里错过了一些重要的事情吗?

谢谢,下面的 updateList():

private void updateList(){
    for (int i=0; i < calculators.size(); i++){
        listModel.addElement(calculators.get(i).getName()); 
    }
}
4

1 回答 1

1

有人见过这个吗?

通常会发生随机错误,因为您没有在 Event Dispatch Thread 上更新 Swing 组件。阅读 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();
            }
        });
    }
}
于 2011-07-11T14:26:34.033 回答