0

ユーザーがすべての xml ファイルを開いて複雑に見えるコンテンツを変更することなく、変更するファイルのスプレッドシートを作成するために膨大な数の xml ファイルを読み取りながら、progressBar または progressMonitor を表示する方法を、可能であれば見つけようとしています。多くのファイルをアップロードするときに、何かが進行中であることを何も示さずにユーザーを待たせるのとは異なり、ユーザーにprogressBarを表示することに固執しています.10秒以上かかります。いくつかの光を当てることは非常に高く評価されています。事前に感謝します。

  public Vector<Vector<SpreadSheetCell>> returnDynamicTrees(int h,int w) 
      {
          //Display thread shows the JProgress Bar for this time consuming method  
          new Thread(new display()).start();

          long ready = System.currentTimeMillis();
          System.out.println("Taking time ?");
           Vector<Vector<SpreadSheetCell>> dynamicTrees = new Vector<Vector<SpreadSheetCell>>();

          Vector<String> columns= columnHeaders(0,validDocs.size(),rootName);


         //Data reading here. 
         //This where too much delay is happening



         //I thought of putting this for loop in a thread 
         for(int j=0;j<fileNames.length;j++)
         {               
            dynamicTrees.add(new Vector<SpreadSheetCell>());
            for(int i=0;i<columns.size();i++)
            {
                dynamicTrees.elementAt(j).add(new SpreadSheetCell(directoryPath+"/"+fileNames[j],columns.get(i),i,j,h,w));

            }  
         }


             long done= System.currentTimeMillis();
          System.out.println(set);          
         System.out.println("Execution time for ReturnDynamicTree "+(done-ready)+" ms.");
         return dynamicTrees;

      }

       //////Method for display JProgressBar
       public static void displayProgressBar()
       {
        frame.setSize(300, 100); //Window size 300x100 pixels
        pane = frame.getContentPane();//Pane is a Container
        pane.add(bar);
        bar.setBounds(20, 20, 20, 20);  //Bar is JProgressBar     
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        new Thread(new Repaint()).start();

       }


       static class Repaint implements Runnable{
         public void run(){
            for (int i=0; i<=100; i++){ //Progressively increment variable i
               bar.setValue(i); //Set value
               bar.repaint(); //Refresh graphics

               try{Thread.sleep(10);} //Sleep 50 milliseconds

                  catch (InterruptedException err){}
               System.out.println();             
            }

         }
      }
       //Thread for running displayProgressBar in a thread to avoid more delay
      static class display implements Runnable{
          public void run(){
            displayProgressBar();
            frame.repaint();
            }
         }
4

2 に答える 2

0

javax.swing.ProgressMonitorInputStream を使用します。JProgressBar を FilterInputStream でカプセル化します。

于 2012-09-21T13:17:08.080 に答える
0

使うJProgressBar

progressBar = new JProgressBar(0, numberOfFiles);

progressBar.setValue各ファイルのアップロードが完了するたびに実行します。

1つずつアップロードしていると仮定します。

于 2012-09-21T10:05:35.557 に答える