java JList 不会刷新,在调试器中工作

java JList wont refresh, works in debugger

JList Jlist;
JScrollPane scrollPane;
DefaultListModel<String> myModel = new DefaultListModel<>();

Jlist = new JList<String>();
scrollPane = new JScrollPane(Jlist);

我将 JList 和 myModel 发送到另一个 class,他们在那里执行以下操作。

myModel.addElement(aString);
Jlist.setModel(myModel );

这会更新调试器中的 JList。当我 运行 它存在时,我在我的 GUI 中看不到 JList 的变化,但变量在调试器中。

编辑#1 按照答案的建议进行了更改:

DefaultListModel<String> myModel = new DefaultListModel<>();
JList Jlist = new JList<String>(myModel );
JScrollPane scrollPane = new JScrollPane(Jlist);

在另一个class.

myModel.addElement(aString);

遗憾的是问题仍然存在

问题是由于并发我没有正确保护共享资源。

您可以(在您的情况下很可能应该)在创建列表并使用模型对其进行初始化后添加元素:

jlist = new JList<String>(myModel);
scrollPane = new JScrollPane(jlist);

然后只需将模型传递给填充它的 class:

myModel.addElement(aString);

此外,如果您在非UI线程中更改模型,可能会出现这样的问题。要检查是否是这样,请尝试在 invokeLater:

中调用 addElement
javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        myModel.addElement(aString);
    }
});