我有这样的代码:Swing invokeLater永不出现,invokeAndWait抛出错误。我能做什么?
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
try {
dialog.handleDownload();
} catch (IOException io) {
io.printStackTrace();
}
}
});
} catch(Exception io) { io.printStackTrace(); }
在
handleDownload
我读的InputStream,计算一个进度条的值,并将其设置到。所以,当我点击一个按钮时,一个新的JFrame打开并执行上面所写的所有内容。
如果我自己有dialog.handleDownload
(没有SwingUtilities方法),它会冻结,直到操作完成。如果我将它添加到invokeLater
中,它会非常快地关闭(我看不到任何东西,操作未完成)。如果我将它添加到invokeAndWait
中,则得到invokeAndWait
不能从事件分派器线程错误中调用。我该怎么办?
这是一个非常好的例子。我会改变这个循环:'for(int i = 0; i <100; i ++){ \t num + = 5; \t publish(num); \t Thread.sleep(100); \t}' – jjnguy 2010-06-14 18:41:42
@jjnguy:在这个例子中,我实际上想要证明发布次数并不决定多少次调用过程(即,中间结果会自动为你整理)。增加睡眠会将其改变为1:1的比例。是否有特定的理由表明我错过了? – 2010-06-14 19:01:11
@Mark,在我的机器上,这个号码刚刚起飞,对我来说似乎没有任何意义。让它移动得慢一点帮助我看看实际发生了什么。 – jjnguy 2010-06-14 19:24:38