Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLists是否有速度限制?_Java_Swing_Jlist_Event Dispatch Thread - Fatal编程技术网

Java JLists是否有速度限制?

Java JLists是否有速度限制?,java,swing,jlist,event-dispatch-thread,Java,Swing,Jlist,Event Dispatch Thread,我很困惑。通过广泛的测试,我可以确认,如果我向连接到JList的DefaultListModel添加对象的速度比y快,JList将消失 以下是我正在做的: JPanel pane = new JPanel(new BorderLayout()); JList<LogMessage> messageList = new JList<LogMessage>(dataModel.getMessageList()); pane.add(messageList , BorderLa

我很困惑。通过广泛的测试,我可以确认,如果我向连接到JList的DefaultListModel添加对象的速度比y快,JList将消失

以下是我正在做的:

JPanel pane = new JPanel(new BorderLayout());
JList<LogMessage> messageList = new JList<LogMessage>(dataModel.getMessageList());
pane.add(messageList , BorderLayout.CENTER);

//add pane to JFrame etc.
JPanel pane=newjpanel(newborderlayout());
JList messageList=新的JList(dataModel.getMessageList());
添加(messageList,BorderLayout.CENTER);
//将窗格添加到JFrame等。
初始化GUI后,我向DefaultListModel添加了100条日志消息。奇怪的是,如果我做线程,一切都能正常工作;在100条新日志消息中的每一条之间。如果我不这样做,JList就会消失

我试图导出为一个可运行的jar并运行它——问题已经解决了。不过,我仍然需要能够从eclipse运行我的程序


造成这种情况的原因是什么?

所有Swing组件只能通过
事件调度线程
或简称
EDT
访问。如果没有,那么您就违反了swing线程原则,并且可能会遇到像您所遇到的那样奇怪的错误


要发布任务(即
Runnable
)以排队在EDT上运行,请使用
SwingUtilities.invokeLater

,所有Swing组件应仅在
事件调度线程上访问,简而言之是在
EDT
上访问。如果没有,那么您就违反了swing线程原则,并且可能会遇到像您所遇到的那样奇怪的错误


要发布任务(即
Runnable
)以排队在EDT上运行,请使用
SwingUtilities.invokeLater

是否将添加到Swing事件线程中的
ListModel
中?史蒂夫:不,我在启动时执行所有操作。这很可能是您的问题。查看
SwingUtilities.invokeLater
您可能正在访问EDT以外的其他线程上的Swing组件,这导致了错误。我刚刚确认,您俩都是对的。当使用SwingUtilities.invokeLater更新ListModel时,它起作用。发布一个答案,我会接受。你是否要添加到Swing事件线程中的
ListModel
?史蒂夫:不,我在启动时做所有事情。这很可能是你的问题。查看
SwingUtilities.invokeLater
您可能正在访问EDT以外的其他线程上的Swing组件,这导致了错误。我刚刚确认,您俩都是对的。当使用SwingUtilities.invokeLater更新ListModel时,它起作用。贴出答案,我会接受。