[英]When I dispose and reopen a JFrame, it doesn't show anything
我有一個使用JFrames創建的相當簡單的Java應用程序。 有一個在我的計划不止一個JFrame的。 我在程序的開頭啟動了一個菜單。 瀏覽完菜單后,我將菜單JFrame放置了。
JFrame主菜單具有一個菜單按鈕,稍后應會啟動完全相同的菜單。 但是,當您從ActionListener內部啟動菜單時(按菜單按鈕時),JFrame無法正常啟動。 沒有任何組件出現,並且顏色熄滅。
但是,從ActionListener外部啟動菜單時,JFrame會完美顯示。 我嘗試了多種方法來解決此問題,但沒有一個起作用。
單擊此處可獲取我的完整程序代碼。
================================編輯================= ===============
另外,我想告訴您,我意識到我的代碼有點混亂。 我不確定該如何編寫其他代碼。
我被迫使用Thread.sleep(x);
因為Swing計時器不是我想要的。 當計時器關閉時,Swing計時器將激活ActionListener。 我需要一個在繼續執行代碼之前需要等待一秒鍾的系統。
我意識到在里面的ActionListeners的while (repeater==0)
循環看起來很瘋狂,但這是我使其工作的唯一方法。 如果我放了一個ActionListener,只是有while循環而在里面沒有任何代碼,那么當我按下按鈕時什么也不會發生。
正如MadProgrammer所說,我會:
建議:放棄當前的方法,然后重新開始。
但是,我當前編寫程序的方式是我知道如何完成所需工作的唯一方式。 我閱讀了這些教程,但是仍然不知道如何按照您告訴我的方式來改進代碼。
我感謝每個人都試圖告訴我改善糟糕的“ Java語法”,但是就我而言,我將在未來20年內不繼續執行該程序,並從中受益。
我之前看過Swing計時器,並且了解了整個new Timer(speed, this);
概念,但我不明白這將如何使我的代碼變得更好。
如果有人想告訴我如何修復我的ActionListeners或Thread.sleep(x);
行,請告訴我。 謝謝。
您正在使用Thread.sleep(3000);
阻止事件調度線程Thread.sleep(3000);
-請勿執行此操作,這將阻止繪制用戶界面
有關該問題的更多詳細信息,請參見Swing中的並發性;有關可能的解決方案,請參見如何使用Swing計時器 。
您可能還想考慮一下“使用多個JFrame,良好/不良做法”? 並考慮使用CardLayout
或JTabbedPane
如果需要臨時阻止用戶(以顯示錯誤消息或收集重要細節),請考慮使用模式JDialog
。 有關更多詳細信息,請參見如何制作對話框
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.