java jframe 运行_java – 使用JProgressBar运行JFrame
你有一個經(jīng)典的并發(fā)和Swing問題.您的問題是您在主Swing線程,EDT或事件調(diào)度線程上執(zhí)行長時間運(yùn)行的任務(wù),這將鎖定線程,直到該過程完成,從而阻止它執(zhí)行其任務(wù),包括與用戶交互和繪制GUI圖形.
解決方案是在后臺線程中執(zhí)行長時間運(yùn)行的任務(wù),例如SwingWorker對象給出的.然后,您可以通過SwingWorker的發(fā)布/進(jìn)程對更新進(jìn)度條(如果是決定因素).有關(guān)這方面的更多信息,請閱讀Concurrency in Swing上的這篇文章.
例如.,
public void myMethod() {
final MyProgessBarFrame progFrame = new MyProgessBarFrame();
new SwingWorker() {
protected Void doInBackground() throws Exception {
// do some processing here while the progress bar is running
// .....
return null;
};
// this is called when the SwingWorker's doInBackground finishes
protected void done() {
progFrame.setVisible(false); // hide my progress bar JFrame
};
}.execute();
progFrame.setVisible(true);
}
此外,如果從另一個Swing組件顯示它,那么您應(yīng)該顯示模態(tài)JDialog而不是JFrame.這就是我在SwingWorker代碼之后在窗口上調(diào)用setVisible(true)的原因 – 這樣如果它是一個模態(tài)對話框,它就不會阻止SwingWorker被執(zhí)行.
總結(jié)
以上是生活随笔為你收集整理的java jframe 运行_java – 使用JProgressBar运行JFrame的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java search 不能使用方法_e
- 下一篇: dbartisan mysql_Syba