簡體   English   中英

Java GUI JProgressBar沒有繪畫

[英]Java GUI JProgressBar not painting

我有一個GUI問題,我想整理出來,但我對發生的事情感到困惑,希望你們中的一個人能解釋一下。 代碼庫太大而無法上傳,但我會詳細解釋發生了什么:

我有一個ProgessBar類,它是一個包含swing JProgressBarJDialog 我有一些吸氣劑和制定者可以根據自己的喜好改變標准,但問題就出現了。

ProgressBar是在myButtonActionPerformed方法中生成的

myButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                myButtonActionPerformed(evt);
            }
        });

基本上當用戶點擊此按鈕時,處理開始並生成ProgressBar

用戶當前在它們前面有一個JFrame ,這個進度條在JDialog彈出。 在Netbeans中逐步調試模式之后,我可以看到JProgressBar的值發生了變化,但是當我的程序處理時,條形圖在視覺上保持0%,然后在離開上面的添加動作偵聽器方法時立即跳轉到100%,幾乎就好像等待重新畫畫一樣,直到那個聽眾。 我不明白的是什么? 有什么我可以調用它會強制它在這個myButtonActionPerformed方法內更新,而不是等到它沒用。

你在做EDT的那段時間嗎? 請記住,AWT / Swing有一個專門的線程來完成GUI的工作 - 處理事件處理程序,重新繪制GUI等。如果你在該線程上做長時間運行,Swing將不會重新繪制。

嘗試在另一個線程中執行您的任務並相應地更新進度條。 但是,使用SwingUtilities.invokeLaterinvokeAndWait更新進度條,以確保在EDT上進行GUI更新。 否則事情變得非常奇怪。

它不更新的原因是因為您的UI線程忙於處理ActionPerformed監聽器。 如果您嘗試與應用程序進行交互,您會注意到UI上的任何內容都沒有響應。

解決方法是不對UI線程進行處理 - 啟動另一個線程,對其進行處理,然后回調UI線程以更新進度條。

首先你的匿名ActionListener只是轉發到一個名為myButtonActionPerformed的方法,所以顯然問題不在於發布的代碼中,而是在myButtonActionPerformed中發生或導致發生的事情。 這就是要發布的相關代碼(如果可能的話)。

第二個人可能已經把這個問題釘在了一起,因為可能的事情確實是EDT上的繁重處理。 可以使用SwingWorkers根據需要有效地將進度/狀態更新路由到GUI線程,並將后台處理移出EDT。

第三:出於興趣,您是否碰巧使用NetBeans進行GUI設計? 看起來像它自動生成的代碼,對我來說。

暫無
暫無

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

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