我对使用线程的想法很新,并且对它们有很多麻烦。方法调用displayComplexStimulus(phase1Trial.getComplexStimulus())在屏幕上显示一组包含图像的jlabels(phase1CompoundLabels)。
我要做的是让那组jlabel显示两秒然后消失。当我不包含实例化的代码,运行并加入compoundThread线程和alternativesThread线程时,图像显示正常。但是,当我包含实例化的代码,运行并加入两个线程时,图像永远不会出现,当我试图让jlabels在消失之前出现两秒钟时。
我是否正确的问题是在Thread开始执行之前,alternativesThread还没有等到compoundThread完成执行?鉴于我加入了这两个主题,我很困惑为什么会这样。如果有人可以帮助我理解为什么我的代码没有按预期工作,我们将不胜感激。
public void phase1() {
while (totalNoOfPhase1Trials > 399) {
Phase1Trial phase1Trial = new Phase1Trial(numberOfElements, elementColors);
displayComplexStimulus(phase1Trial.getComplexStimulus());
validate();
Thread compoundThread = new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Thread.currentThread().interrupt();
}
}
});
Thread alternativesThread = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < numberOfElements; i++) {
remove(phase1CompoundLabels[i]);
}
validate();
}
});
compoundThread.start();
alternativesThread.start();
try {
compoundThread.join();
alternativesThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
totalNoOfPhase1Trials--;
}
}
答案 0 :(得分:0)
如果你想在alternativesThread
完成后运行compoundThread
,那么请在alternativesThread.start();
的run()方法中写compoundThread
所以它会等到处理compoundThread
完成。