Java JLists是否有速度限制?
我很困惑。通过广泛的测试,我可以确认,如果我向连接到JList的DefaultListModel添加对象的速度比y快,JList将消失 以下是我正在做的: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
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时,它起作用。贴出答案,我会接受。