我看到一些我真的不明白的行为。在第一段代码中,当调用run()时,会弹出JFrame,并填充JPanel。在第二段代码中,JFrame弹出,但JFrame没有填充,窗口似乎没有反应。
final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE);
run (s, g, d);
这不起作用:
final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE);
runButton.addMouseListener(new MouseAdapter() {
@SuppressWarnings("unchecked")
public void mouseClicked(MouseEvent event) {
run(s, g, d);
}
});
答案 0 :(得分:4)
您需要在事件侦听器中执行操作,即在另一个线程中运行(s,g,d)命令。
摘自http://docs.oracle.com/javase/tutorial/uiswing/events/generalrules.html
关于事件监听器的最重要的规则是 他们应该很快执行。因为所有的绘图和 事件监听方法在同一个线程中执行,很慢 事件监听器方法可以使程序看起来没有响应和缓慢 重新粉刷自己。如果你需要执行一些冗长的操作 事件的结果,通过启动另一个线程(或 以某种方式发送请求到另一个线程)来执行操作。 有关使用线程的帮助,请参阅Swing中的并发。