0

我试图在阅读 excel 文件时显示进度。我共享一个包含最大行号和读取的最后一个行号的对象。每 150 行我将值保存在我的对象中,我让它等待并且我的读取停止,直到对象被解锁。

在我的对话窗口中,我尝试ProgressBar使用对象中的值更新 using syncExec 或 asyncExec 方法。并且在调用方法后对象被解锁。

我知道这些方法正在等待最“合适”的场合在那里运行可运行文件。但是我似乎不明白的是,如果在调用这些方法时没有任何运行,为什么不执行这些方法?

我的实际情况是,asyncExec 仅在读取过程结束时更新 ProgressBar,synExec 挂起应用程序,因为它在 Object#wait 运行时无法执行。

感谢阅读,更感谢您的回答。

4

2 回答 2

2

下一个合理的机会发生在您的 runnable 到达事件循环队列的头部时。事件循环一直在运行,同时有可运行的对象在其中等待。我怀疑你正在死锁事件循环的线程。

于 2012-07-10T09:25:53.257 回答
1

1.不要使用等待,而是尝试使用java.util.concurrent包中的CountDownLatch 。

2.根据完成的工作更新进度条。

3.我希望你一次只看一张 Excel 表格。所以让CountDownLatch 只设置 1 个计数器。

4. excel 表读取完成后,计数器变为 0,await() 方法之后的代码将执行。在这里,您将关闭对话框。

检查此链接:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html

于 2012-07-10T09:26:52.303 回答