(Java) JList 在程序启动时偶尔会显示空列表

发布于 2024-11-19 09:59:35 字数 444 浏览 2 评论 0原文

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

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

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

谢谢,下面的 updateList() :

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

My program reads in files from a given directory on program start (each one containing an object), and adds each object to a Vector. updateList() is then called which loops through each of these objects one by one, adding their names(String property) to a JList with a DefaultListModel.

The issue is that very rarely when the program starts, the list appears empty. I have performed many checks such as getting the number of entries in the list as reported by the list model and everything would appear to be correct.

Has anybody seen this before? Am I missing something important here?

Thanks, updateList() below:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风追烟花雨 2024-11-26 09:59:35

有人见过这个吗?

随机错误通常会发生,因为您没有更新事件调度线程上的 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();
            }
        });
    }
}

Has anybody seen this before?

Random errors generally happen because you are not updating Swing components on the Event Dispatch Thread. Read the section from the Swing tutorial on Concurrency for more information.

In particular you would use the invokeLater() method when starting your GUI. The Swing tutorial has plenty of examples. The basic structure the tutorial uses is like:

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();
            }
        });
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文