Java Can';JList的t加法

Java Can';JList的t加法,java,swing,concurrency,jlist,event-dispatch-thread,Java,Swing,Concurrency,Jlist,Event Dispatch Thread,我知道这不是填写JLists的唯一问题,但我在另一个SO线程中没有找到答案 我已经使用Netbeans GUI生成器创建了我的GUI。JList被添加到滚动窗格中,如果我硬编码JList的内容,则所有内容都显示良好 jList1.setModel(new javax.swing.AbstractListModel() { public String[] strings = {"1", "2", "etc..."}; @Override public int getSize() {

我知道这不是填写JLists的唯一问题,但我在另一个SO线程中没有找到答案

我已经使用Netbeans GUI生成器创建了我的GUI。JList被添加到滚动窗格中,如果我硬编码JList的内容,则所有内容都显示良好

jList1.setModel(new javax.swing.AbstractListModel() { 
public String[] strings = {"1", "2", "etc..."}; 
@Override 
  public int getSize() { 
  return strings.length; 
} 

@Override 
   public Object getElementAt(int i) { 
   return strings[i]; 
} 
}); 
但如果我尝试通过
SwingWorker
动态添加项目,则不会显示任何内容

JList jList1 = new javax.swing.JList();
DefaultListModel info = new DefaultListModel();
....
jList1.setModel(info);

....
public void FillList(final String subject) {

    worker = new SwingWorker() {
        @Override
        protected Object doInBackground() {
            info.addElement(subject);

            return 0;
        }

        @Override
        protected void done() {
        }
    };
    worker.execute();
}
我只想在JList中显示主题以供视觉使用,其余的都是在背景中完成的

感谢您的帮助

谢谢

  • Swing是单线程的,所有到可见GUI的输出都必须在EDT上完成

  • 你对我有意见吗

  • 来自的输出不可用

  • 然后,中的任何更改在Swing GUI中都不可见

  • 必须重写,这两种方法相当均衡,输出将在EDT上进行


您确定代码正在执行吗?一点调试,甚至是一个位置合适的
系统.out.println
都能给你提供很多视角。谢谢你的回答。是的,我确信它正在执行。如果放置此行:
System.out.println(info.getSize())
doInBackground()
列表模型的大小增加。当您使用动态内容时,是否将动态内容存储在数组“strings”中?哎呀,我忘了更改
getSize()
getElementAt()
方法。但是在另一个类中,我从一个电子邮件帐户中检索某些消息,从中我获取主题并调用
FillList(subject)
,因此每个电子邮件都会调用FillList。我只想在JList中显示主题以供视觉使用,其余部分在后台完成。错误-您不能从辅助线程中更改组件(无论是其任何属性还是基础模型),该线程不在doInBackground()中,谢谢您的回答!我将花一些时间阅读这些链接,谢谢你的帮助。