在我的程序中我必须使用JProgress Bar实时显示,已经加密了多少像素..所以我在互联网上看,我发现我应该使用Thread,我试过但不工作,这里是什么我做完了:
public class progress_barr extends Thread
{
public void run ()
{
JPB_crypt.setValue(prog); // prog is manipulated in showpixels function
System.err.println("progress here !");
}
}
public class calculate extends Thread
{
public void run()
{
showPixel();
}
}
比我后来打电话给他们,这就是我用它的方式
JPB_crypt.setValue(0);
appel=1; // to initiate show function
calculate calc = new calculate();
progress_barr pb = new progress_barr();
calc.start();
pb.start();
问题仍然相同,我的程序完成数据处理比将我的jprogress设置为100%..不是在进行中但是立刻! 我需要他们同时工作
答案 0 :(得分:1)
您使用线程的一般想法是正确的,但为了能够随着计算进度更新JProgressBar,您需要使用SwingWorker。
SwingWorker背后的想法是,您可以使用doInBackground方法在backgournd中运行方法,然后发布您的结果以供UI使用而不锁定它。
你在代码中做的是实际上有两个同时启动的线程。第一个计算您需要计算的任何内容,第二个应该立即更新进度条。
这种方法不起作用,因为每次第二个线程必须等待第一个线程结束它的工作才能得到结果。
您可以在此处阅读有关SwingWorker的更多信息:
https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html