avatar
问个进度条的问题# Java - 爪哇娇娃
j*s
1
我的任务很简单,创建一个JFrame,在actionperform里响应事件,处理问题并用
ProgressMonitor显示进度。问题是进度条不刷新,知道100%了才显示。google了一下
,可能是因为AWT事件进程下进度条没法刷新。我试了在actionperform创建新线程来包
含进度条,效果一样,还是不行。哪位高手给解惑一下?需要原代码吗?
avatar
B*h
2
试试SwingUtilities.invokeLater(runnable).有时候你在一个awt event handler最后
作一些改变,这些改变会等到当前method return以后才会被放进event queue.这个inv
okeLater就是来解决这些问题的,google一下

【在 j*******s 的大作中提到】
: 我的任务很简单,创建一个JFrame,在actionperform里响应事件,处理问题并用
: ProgressMonitor显示进度。问题是进度条不刷新,知道100%了才显示。google了一下
: ,可能是因为AWT事件进程下进度条没法刷新。我试了在actionperform创建新线程来包
: 含进度条,效果一样,还是不行。哪位高手给解惑一下?需要原代码吗?

avatar
j*s
3
多些帮助,试了一下SwingUtilities.invokeLater,奇怪的是,里面的runnable仍然是
最后才执行的,能帮我看看代码吗?
public volatile int PROGRESS=0;
public volatile ProgressMonitor p_monitor;
....
p_monitor=new ProgressMonitor(null, "Monitoring Progress","Initializing . .
.", 0,11);
p_monitor.setProgress(0);
Runnable progressUpdate=new Runnable()
{
public void run()
{
System.out.println("run "+PROGRESS);
p_monitor.setProgress(PROGRESS);
}
};

int fileCount = 10;
int temp=0;
while(

【在 B*********h 的大作中提到】
: 试试SwingUtilities.invokeLater(runnable).有时候你在一个awt event handler最后
: 作一些改变,这些改变会等到当前method return以后才会被放进event queue.这个inv
: okeLater就是来解决这些问题的,google一下

avatar
B*h
4
这个invokeLater是在当前的method返回后才执行的,你在while里面对progress增量,
怎么样都只执行一次。因为这些swing的东西都是被放在一个event queue中等待执行,
而不是像你以为的马上执行。所以等你的method运行结束,进度条才会更新。

.

【在 j*******s 的大作中提到】
: 多些帮助,试了一下SwingUtilities.invokeLater,奇怪的是,里面的runnable仍然是
: 最后才执行的,能帮我看看代码吗?
: public volatile int PROGRESS=0;
: public volatile ProgressMonitor p_monitor;
: ....
: p_monitor=new ProgressMonitor(null, "Monitoring Progress","Initializing . .
: .", 0,11);
: p_monitor.setProgress(0);
: Runnable progressUpdate=new Runnable()
: {

avatar
B*h
5
试试这个invokeAndWait(Runnable doRun)

【在 B*********h 的大作中提到】
: 这个invokeLater是在当前的method返回后才执行的,你在while里面对progress增量,
: 怎么样都只执行一次。因为这些swing的东西都是被放在一个event queue中等待执行,
: 而不是像你以为的马上执行。所以等你的method运行结束,进度条才会更新。
:
: .

avatar
j*s
6
看来不能在actionperformed()里面用,错误:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call
invokeAndWait from the event dispatcher thread
at java.awt.EventQueue.invokeAndWait(Unknown Source)
at javax.swing.SwingUtilities.invokeAndWait(Unknown Source)

【在 B*********h 的大作中提到】
: 试试这个invokeAndWait(Runnable doRun)
avatar
B*h
7
那你就在另外一个线程里试试看啦,这些swing东西很烦的。

【在 j*******s 的大作中提到】
: 看来不能在actionperformed()里面用,错误:
: Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call
: invokeAndWait from the event dispatcher thread
: at java.awt.EventQueue.invokeAndWait(Unknown Source)
: at javax.swing.SwingUtilities.invokeAndWait(Unknown Source)

avatar
m*t
8
Try start a worker thread in actionPerformed to do the actual processing,
and update the progress bar from the worker thread.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。