2011-10-22 139 views
2

我的应用程序由两个类文件组成,我们称它们为A和B. A是主要文件 - 执行的文件和jar文件的主要类。在A中我定义了一个JFrame,我添加了两个JPanel:其中一个由JButton和JLabels组成,另一个是图形化的,并且在B(B extends JPanel)中实现。立即更改JLabel

在B我有一个方法可能需要一段时间,所以我想给用户有关进程的信息;即,我想告诉用户剩下多少计算。我想通过更新A类中的JLabel来实现。但是,当我尝试它时,我发现只有在方法完成后才更新JLabel,而不是看到它从0%运行到100%,我只看到100%,所有的时间。

我不认为我有任何相关的代码片段向您展示,但如果您想要我发布某些内容,请告诉我。

我检查了类似的问题,但在我看来,他们问的东西很不一样。

谢谢,

Ron。

回答

5

你的问题是一个线程问题。您长期运行的过程将捆绑主要的Swing线程EDT,防止任何绘图,组件更新或用户交互。您需要在后台线程(如由SwingWorker对象提供的线程)中执行长时间运行的进程。做到这一点,你的GUI将变得更加快速响应。

查看Concurrency in Swing了解更多关于这个重要主题的信息。

如果您需要更具体的帮助,您需要提供更多信息和代码。

+0

非常丰富 - 看起来会解决我的问题。非常感谢! – ronash

+1

不客气。你是Mandelbrot集合人,所以我不惊讶你需要使用后台线程。您进入该集合的深度越深,所需的迭代次数越多,所需的数字精度就越高,因此计算的确需要很长时间。 –

+0

确切地说,我也认出了你! :-)感谢你我还会学习一些重要的技能。 – ronash