我很困惑。通过广泛的测试,我可以确认,如果我将比y更快的对象添加到连接到JList的DefaultListModel,则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.
初始化GUI后,我将100个LogMessages添加到DefaultListModel。奇怪的是,如果我做Thread.sleep(10),一切都有效;在100个新LogMessages中的每一个之间。如果我不这样做 - JList消失了。
我试图导出为可运行的jar并运行它 - 问题已经消失。我仍然需要能够从eclipse运行我的程序。
导致这种情况的原因是什么?
答案 0 :(得分:3)
只应在Event Dispatch Thread
或EDT
上访问所有Swing组件。如果没有,那么你违反了摆动线程原则,你可能会遇到像你得到的那样的奇怪错误。
要发布要排队等候在EDT上运行的任务(即Runnable
),请使用SwingUtilities.invokeLater