[英]Modal dialog not always on top of an undecorated JFrame when another JFrame is visible
[英]How to notify threads when modal dialog becomes visible?
我正在使用SwingUtilities.invokeLater在SwingWorker線程中設置一個模態對話框。 我希望SwingWorker線程等到對話框變得可見。 做這個的最好方式是什么? 我已將以下代碼放在SwingWorker對象的doInBackground()方法中。
synchronized (myDialog) {
while (!myDialog.isVisible()) {
myDialog.wait();
}
}
在MyDialog類中重寫的setVisible()方法中:
public void setVisible(boolean enabled) {
synchronized (this) {
notifyAll();
}
super.setVisible(enabled);
}
但是,這似乎不起作用,因為存在計時問題 - 必須在super.setVisible()之前調用notifyAll(),因此SwingWorker線程可以處於等待狀態。
我正在試圖找到一個很好的方法來做到這一點,但我變得非常沮喪!
使用JOptionPane
而不是普通的JDialog
JOptionPane
塊代碼執行,直到實現一些動作
你可以將JComponents
添加到JOptionPane
就像JDialog
不要操作worker的doInBackground()
方法中的對話框。 而是publish()
一個合適的結果,並使該對話框從process()
可見。 您還可以注冊一個PropertyChangeListener
,它將響應來自doInBackground()
setProgress()
調用而被觸發。 這個例子說明了這兩種機制
順便說一句,我會重申@ kleopatra和@mKorbel的建議,以便更好地解釋你究竟想要實現的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.