多线程不起作用

时间:2012-08-08 11:58:55

标签: java multithreading user-interface countdownlatch

我正在尝试使用GUI界面运行代码。但是在我继续使用main方法之前,我需要关闭所有GUI窗口,(我需要的一些信息是从GUI窗口收集的,而我无法运行其余的代码而没有这些信息)。 所以,我决定使用CountDownLatch创建两个线程(其中一个是我的主要方法,另一个是处理我的GUI的类)。但是,当我运行我的代码时,它会停留在GUI的末尾,并且不会继续执行我的代码。有谁知道我的代码有什么问题?

public static void main (String[] args) throws IOException,InterruptedException{
long start = System.currentTimeMillis();
        double longThreshold, shortThreshold, investment;
        System.out.println("hello");
        CountDownLatch startSignal = new CountDownLatch(1);
        CountDownLatch stopSignal = new CountDownLatch(1);
        ProgrammeSettings mySettings=new ProgrammeSettings(startSignal,stopSignal);
                new Thread(mySettings).start();  // mysettings object is the GUI stuff
        startSignal.countDown();
            stopSignal.await();
        longThreshold = mySettings.getlowerThreshold();
        shortThreshold = mySettings.getupperThreshold();
        investment =mySettings.getinvestment();
        System.out.println("hello");
}

这里也是我的GUI内容的CountDownLatch代码:

public class ProgrammeSettings implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch stopSignal;

ProgrammeSettings(CountDownLatch startSignal, CountDownLatch doneSignal) {
      this.startSignal = startSignal;
      this.stopSignal = doneSignal;
   }
    public void graphicDesign(){
     // do some GUI stuff 
   }
@Override
public void run() {
    // TODO Auto-generated method stub
    try{
        startSignal.await();
        graphicDesign();
        stopSignal.countDown();
    }
    catch( InterruptedException e){

    }

}

}

1 个答案:

答案 0 :(得分:2)

基本思想确实有效但你不能在任何线程中运行GUI代码;它必须在Swing的UI线程中运行。

因此,更好的解决方案是在新线程中运行“等待完成数据输入”,让主线程处理UI。