我有一個自定義JDialog
的問題,它是由主框架在其自己的線程中創建的。JDialog不可見
有時JDialog
是不可見的,但它的控制點是可點擊的(如果你知道它們的位置在哪裏)。這個問題在Oracle Java 1.7上不會發生,但是可以在Oracle Java 1.6上定義(1.6.0_37和1.6.0_45)。
我創建這樣的對話框:
class MyDialog extends Jdialog() {
public MyDialog(JFrame frame, boolean modal) {
super(frame, modal);
[...]
}
}
在我的主機:
MyDialog dialog = new MyDialog(myMainFrame,true);
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);
預期的行爲是阻止像大型機和謊言在它的MouseEvents
事件。這在Java 1.7上完美運行。
所以我的問題是,創建JDialogs
時是否有任何特殊的事情需要記住,比如僅在創建它時,在parentframe(所有者)可見之後,或者它可能是已知的使用Java JRE的bug?我已經在Oracle here的錯誤修復日誌中檢查過,但沒有成功。
應該沒有理由像@subash所說的那樣調用'repaint()'或'revalidate'。你的問題聽起來是間歇性的,這對我來說是一個Swing線程問題的味道。您是否在照顧美國東部時間的所有Swing電話?並且從美國東部時間撥打長時間運行的代碼?最好的是,如果你可以發佈編譯,運行和複製你的問題的短代碼,[sscce](http://sscce.org)。 –
你是對的,SSCCE會更好,但我的問題是參與一個大型代碼項目,所以sccce不幸不會重現我的問題。我認爲@Durandal暗示使我朝着正確的方向發展,因爲它似乎是線程問題。這可以解釋爲什麼它不會總是發生,但有時只是發生。 JAVA 1.6/1.7問題可能與不同的設計有關。謝謝你的幫助! – alex