我有一個按鈕單擊事件,將觸發一個擺動工作線程,該線程作爲回報激發另一個線程進行長時間計算,包括寫入文件。然後讀取該文件以繪製一些圖形。然而繪製如果我不添加之間的延遲部分永遠不會發生。(它說沒有找到文件,雖然文件是there..What是更好的辦法來解決這一問題而不增加延遲..擺動工人延遲
private void buttonFragmentActionPerformed(java.awt.event.ActionEvent evt) {
try
{
ESIPlusFragmenterWorker epfw = new ESIPlusFragmenterWorker(10, sdfFile, cidSpectrum);
epfw.execute();
Thread.sleep(1000);
holder.molTable1.drawMolViewPanel(currDir+sep+"esiFragments"+sep+"esiFrag.sdf");
}
catch (Exception e)
{
e.printStackTrace();
}
}
搖擺工人
public class ESIPlusFragmenterWorker extends SwingWorker<Void, Void>{
int mzppm_;
String SDF_;
String spectrum_;
Double mion_;
MolTable holder_;
ESIPlusFragmenterWorker(int mzppm, String SDF, String spectrum)
{
mzppm_ = mzppm;
SDF_ = SDF;
spectrum_ = spectrum;
}
@Override
protected Void doInBackground() {
try
{
Molecule mol;
MolImporter importer = new MolImporter(SDF_);
ExecutorService te = Executors.newFixedThreadPool(1);
while ((mol = importer.read()) != null)
{
Runnable epf = new ESIPlusFragmenter(mol, spectrum_, mzppm_);
Thread t = new Thread(epf);
te.execute(epf);
}
importer.close();
te.awaitTermination(10, TimeUnit.MINUTES);
}
catch (Exception e)
{
//
}
finally
{
return null;
}
}
@Override
protected void done() {
try {
//
} catch (Exception e) {
//e.printStackTrace();
}
}
}
+1這是一個好得多的答案,然後是我想到的一行。 – Robin
@Robin:謝謝! –
感謝您的詳細答案..但是,這種方法沒有奏效。我想知道這個問題是否在其他地方..我正在給這個問題增加一個swing工人類。 – lochi