簡體   English   中英

當模態對話框變得可見時如何通知線程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM