2016-04-30 21 views
0

在我的程序中我必须使用JProgress酒吧实时显示多少像素已经加密..所以我在互联网上看,我发现我应该使用线程,我试过但不工作,这里是我做了什么:java netbeans和jprogress吧

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(); 

问题还是一样,我的程序完成数据处理比设定我的进步到100%..不是在进步,而是在一次! 我需要它们同时工作

+0

你需要表现出更多的代码,一个小的可运行可测试的程序或[MCVE]将是最好的。这不是你的整个程序,也不是一个链接。 –

回答

1

您使用线程的一般想法是正确的,但为了能够随着计算进度随时更新JProgressBar,您需要使用SwingWorker。

SwingWorker背后的想法是,您可以使用doInBackground方法在后台运行方法,然后发布您的结果供UI使用而不锁定它。

你在你的代码中做的是实际上有两个线程同时启动。第一个计算你需要计算的任何东西,第二个应该在进度条上动态更新。

这种方法是行不通的,因为每次第二个线程都必须等待第一个线程结束它的工作才能获得结果。

你可以阅读更多有关在这里的SwingWorker:

https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html

+0

谢谢,事实上,我学会了如何使用摆动工具和多线程,现在它的工作;)再次感谢 –

+0

那么这是唯一容易和正确的方式来拥有这样的工作。 – Aris