我正在使用SwingWorker在後臺執行某些操作。在執行過程中,我有一個條件,我需要通過拋出一個JoptionPane.showOptionDialog()來詢問用戶。 我不想在我的模型類中做到這一點,並且不想在執行SwingWorker.doInBackground時執行此操作。執行SwingWorker doInBackground時的用戶輸入
我相信很多人都遇到過這個問題。
所以我必須從調用返回到doInBackground,然後要求done()中的用戶輸入。然後我需要啓動另一個SwingWorker並從done方法執行doInBackground()?
是否有另一種整理/簡單的方法呢?
更新(用於mkorbel的問題)
一流的設計是這樣的:
public class OptionInSwingWorker {
public static void main(String[] args) {
JFrame frame=new JFrame();
JButton test = new JButton("Test");
frame.add(test);
test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void,Void>(){
@Override
protected Void doInBackground() throws Exception {
// check for a value in the database
// if value is something.. throw up an OptionPane
// and ask the user a question..
// then do something...
return null;
}
@Override
protected void done() {
// open some other dialog
}
}.execute();
}
});
}
}
我用什麼來傳遞窗口的引用,以及我用於調用JOption的工作線程的進度方法。但它不是一個好主意,如果處理不當,最終會出現很多彈出窗口。使用超時關閉一些默認值 –
在執行過程中,我有一個...,是從嵌套的無效或由SwingWorker執行的類談論異常 – mKorbel