2017-09-12 79 views
0

好了,所以我知道該怎麼做無限期JProgressBars,但我不明白怎麼做明確的。例如,假設我使用JProgressBar來表示我正在加載遊戲。在加載這個遊戲我有信息,我想從信息的一些文件加載​​並初始化變量:Java:如何有一個明確的JProgressBar加載的東西?

private void load() { 
    myInt = 5; 
    myDouble = 1.2; 
    //initialize other variables 
} 

並說我有4個文件,我想負荷信息。如何翻譯此文件以提供100%的精確加載欄?

+1

的可能的複製[JProgressBar的,而在擺動數據加載](https://stackoverflow.com/questions/13366801/jprogressbar-while-data-loading-in-swing) –

+0

@NisheshPratap這沒有幫助,我不明白那個人想要做什麼。 –

回答

0

你需要做的工作在一個單獨的線程,並隨着工作的進展更新進度條的模型。

它在Swing事件線程,它可以通過與SwingUtilities.invokeLater執行更新代碼來實現執行模式的更新是非常重要的。

例如:

public class Progress { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Loading..."); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JProgressBar progressBar = new JProgressBar(0, 100); 
     frame.add(progressBar); 
     frame.pack(); 
     frame.setVisible(true); 

     // A callback function that updates progress in the Swing event thread 
     Consumer<Integer> progressCallback = percentComplete -> SwingUtilities.invokeLater(
      () -> progressBar.setValue(percentComplete) 
     ); 

     // Do some work in another thread 
     CompletableFuture.runAsync(() -> load(progressCallback)); 
    } 

    // Example function that does some "work" and reports its progress to the caller 
    private static void load(Consumer<Integer> progressCallback) { 
     try { 
      for (int i = 0; i <= 100; i++) { 
       Thread.sleep(100); 
       // Update the progress bar with the percentage completion 
       progressCallback.accept(i); 
      } 
     } catch (InterruptedException e) { 
      // ignore 
     } 
    } 
} 
+0

那麼這是否意味着我必須自己衡量進度?例如,如果我加載了3個變量,這是否意味着每次我初始化一個變量時,我都必須設置每次進度?另外,' - >'做什麼? –

+0

是的,你必須自己更新進度條。看到[這個答案](https://stackoverflow.com/questions/15146052/what-does-the-arrow-operator-do-in-java)重新箭頭操作符。 – teppic

相關問題