0

如果可能的话,我试图找到一种方法,在读取大量 xml 文件以制作要修改的文件电子表格时显示 progressBar 或 progressMonitor,而无需用户打开每个 xml 文件并修改可能看起来很复杂的内容用户,我已经完成并且它现在工作正常我坚持向用户显示progressBar,这与让用户等待而没有任何迹象表明正在进行中,当上传许多文件时,它需要接近十秒或更长时间。非常感谢您提供的一些亮点,在此先感谢您。

  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。用 FilterInputStream 封装 JProgressBar。

于 2012-09-21T13:17:08.080 回答
0

用一个JProgressBar

progressBar = new JProgressBar(0, numberOfFiles);

progressBar.setValue当每个文件上传完成时做一个。

假设您正在逐一上传。

于 2012-09-21T10:05:35.557 回答