Java GUI JProgressBar没有绘画

Rya*_*yan 3 java user-interface swing jprogressbar

我有一个GUI问题,我想整理出来,但我对发生的事情感到困惑,希望你们中的一个人能解释一下.代码库太大而无法上传,但我会详细解释发生了什么:

我有一个类ProgessBar是一个JDialog包含摆动JProgressBar.我有一些吸气剂和制定者可以根据自己的喜好改变标准,但问题就出现了.

ProgressBar是在方法中生成的 myButtonActionPerformed

myButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                myButtonActionPerformed(evt);
            }
        });
Run Code Online (Sandbox Code Playgroud)

基本上当用户点击此按钮时,处理开始并ProgressBar产生.

用户当前有一个JFrame在他们面前,这个进度条弹出一个JDialog.在Netbeans中逐步调试模式之后,我可以看到它JProgressBar的值发生了变化,但是当我的程序处理时,条形图在视觉上保持0%,然后在它离开上面的添加动作侦听器方法时立即跳转到100%,几乎为如果它等待重画,直到听众.我不明白的是什么?有什么我可以调用它会强制它在这个myButtonActionPerformed方法内更新,而不是等到它没用.

Joe*_*oey 5

你在做EDT的那段时间吗?请记住,AWT/Swing有一个专门的线程来完成GUI工作 - 处理事件处理程序,重新绘制GUI等.如果你在该线程上做长时间的事情,Swing将不会重新绘制.

尝试在另一个线程中执行您的任务并相应地更新进度条.但是,使用SwingUtilities.invokeLaterinvokeAndWait更新进度条以确保在EDT上进行GUI更新.否则事情变得非常奇怪.