我有一个要添加 JLabel 的 JPanel。然后我想删除所有的 JLabel 并添加一些新的。
所以我做了以下事情:
panel.removeAll();panel.repaint();
panel.add(new JLabel("Add something new");
panel.revalidate();
这工作正常。当我在此之后启动一个新线程时,我的问题出现了:
panel.removeAll();panel.repaint();
(1)panel.add(new JLabel("Add something new");
panel.revalidate();
//new thread to start - this thread creates new JLabels that should appear under (1)
firstProducer.start();
try {
firstProducer.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后原始 JLabels 的输出仍然可见。我已经读到重新验证过程是一项长时间运行的任务,因此在重新验证正在进行并出现冲突时 firstProducer 线程正在启动。处理这个问题的最佳方法是什么?