【发布时间】:2015-03-19 18:59:23
【问题描述】:
我有一个创建 JFrame 的类。单击开始按钮时,它会调用我的 CoinCounterMechanism 类。该类包含以下线程:
Thread consumer = new Thread("CONSUMER"){
public void run ()
{
Integer coin;
while (producerFlag)
try
{
coin = queue.take();
System.out.println("Coin received: " + coin);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
};
当从我的其他类调用此线程时,我需要将 JFrame 传递给它,以便我可以修改 JFrame 内容。我怎样才能做到这一点?这是一个入门级的java课程,所以老师给了我们大部分代码。下面是调用线程的代码:
Button btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cm = new CoinCounterMechanism();
cm.setConsumerFlag();
cm.setProducerFlag();
cm.producer.start();
cm.consumer.start();
}
});
【问题讨论】:
-
唯一应该对
JFrame做任何事情的线程是 UI 线程。 -
请记住,swing 不是线程安全的。最好使用回调与可用于将线程与 EDT 同步或使用 SwingWorker
-
考虑为这个问题和您之前的问题投票赞成有用的答案并接受最佳答案。否则,你是在要求志愿者付出努力,而不是奖励他们的努力。
标签: java multithreading swing