簡體   English   中英

當我處理並重新打開JFrame時,它什么也沒有顯示

[英]When I dispose and reopen a JFrame, it doesn't show anything

我有一個使用JFrames創建的相當簡單的Java應用程序。 一個在我的計划不止一個JFrame的。 我在程序的開頭啟動了一個菜單。 瀏覽完菜單后,我將菜單JFrame放置了。

JFrame主菜單具有一個菜單按鈕,稍后應會啟動完全相同的菜單。 但是,當您從ActionListener內部啟動菜單時(按菜單按鈕時),JFrame無法正常啟動。 沒有任何組件出現,並且顏色熄滅。

但是,從ActionListener外部啟動菜單時,JFrame會完美顯示。 我嘗試了多種方法來解決此問題,但沒有一個起作用。

單擊此處可獲取我的完整程序代碼。

  • 主要類是“ LetsMultiply5.java”。 此類還設置了ActionListener。
  • 導致問題的JFrame是“ MenuWindow.java”。
  • “ LetsMultiply5.java”調用“ Booter.java”類,然后該類調用“ MenuWindow.java”。
  • “ MainWindow.java”是具有“菜單”按鈕的JFrame。
  • 為了證明這一點,“ SpeedModer.java”在處理后會調用菜單窗口並起作用。

================================編輯================= ===============

另外,我想告訴您,我意識到我的代碼有點混亂。 我不確定該如何編寫其他代碼。

我被迫使用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,良好/不良做法”? 並考慮使用CardLayoutJTabbedPane

如果需要臨時阻止用戶(以顯示錯誤消息或收集重要細節),請考慮使用模式JDialog 有關更多詳細信息,請參見如何制作對話框

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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