<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 154  文章 - 60  trackbacks - 0
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    聲明:

    該blog是為了收集資料,認識朋友,學習、提高技術,所以本blog的內容除非聲明,否則一律為轉載!!

    感謝那些公開自己技術成果的高人們!!!

    支持開源,尊重他人的勞動!!

    常用鏈接

    留言簿(3)

    隨筆分類(148)

    隨筆檔案(143)

    收藏夾(2)

    其他

    學習(技術)

    觀察思考(非技術)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在讀取大型文件或者其它大批量數據輸入操作時,希望能夠通過一個進度條顯示當前的進度,現在在Java中非常容易實現,僅僅需要幾行代碼即可。Java的swing包提供了ProgressMonitorInputStream類,該類提供了自動地彈出進度窗口和事件處理機制。

    使用這個類也非常方便,只需要把任何一個InputStream作為參數,構造一個新的ProgressMonitorInputStream類,其它不需要任何額外的代碼,即可實現進度窗口的自動生成。ProgressMonitorInputStream類可以和其它InputStream一樣使用。

    ProgressMonitorInputStream類繼承層次

    [pre]java.lang.Object
                |
                +--java.io.InputStream
                |
                +--java.io.FilterInputStream
                |
                +--javax.swing.ProgressMonitorInputStream[/pre]

    構造方法

    ProgressMonitorInputStream
                (Component parentComponent,
                Object message, InputStream in)
                parentComponent - 觸發被監視操作的組件
                message - (如果彈出進度顯示窗口),
                顯示在進度顯示窗口中的指示信息
                in - 需要監視的輸入流

    操作方法

    除了在InputStream和FilterInputStream中繼承的方法外,還增加了如下方法:

    ProgressMonitor getProgressMonitor()
                //得到當前對象使用的ProgressMonitor對象。
                int read()
                int read(byte[] b)
                int read(byte[] b, int off, int len)
                void reset()
                long skip(long n)
                //上面幾個方法都是覆蓋了FilterInputStream中的方法,
                因為需要更新進度指示。
                void close()
                //因為需要關閉進度監視對象和窗口,
                所以覆蓋了FilterInputStream父類中的close方法。


    示例代碼:

    import java.awt.FlowLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.io.FileInputStream; 
    import java.io.InputStream; 

    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.ProgressMonitorInputStream; 

    public class ProgressMonitorTest 

      
    public static void main(String[] args) 
      

        
    // 創建一個包含“Click me”的窗口 
        final JFrame f =
        
    new JFrame("ProgressMonitor Sample"); 
        f.getContentPane().setLayout(
    new FlowLayout()); 
        JButton b 
    = new JButton("Click me"); 
        f.getContentPane().add(b); 
        f.pack(); 

        
    // 設置按鈕的動作事件 
        b.addActionListener(new ActionListener()
        

          
    public void actionPerformed(ActionEvent e)
          

            
    // 這兒使用了新的線程處理按鈕的動作事件,
            因為我們需要 
            
    //主窗口的線程響應用戶。這樣你可以多次點擊該按鈕, 
            
    //會啟動多個讀取文件的線程。主窗口也保持響應。 
            new Thread() 
            

              
    public void run()
              

                
    try 
                  
    // 打開文件輸出流,
                  
                  把InputStream包裝在ProgressMonitorInputStream中。 
                  
    //在當前目錄中需要放置一個大文件,建議超過50M 
                  InputStream in = new FileInputStream("bigfile.dat");  
                  ProgressMonitorInputStream pm 
    =  
                   
    new ProgressMonitorInputStream(f,"Reading a big file",in); 
                  
    // 讀取文件,如果總耗時超過2秒,
                  將會自動彈出一個進度監視窗口。 
                  
    //   顯示已讀取的百分比。 
                  int c; 
                  
    while((c=pm.read()) != -1
                  

                    
    // 處理代碼 
                  }
     
                  pm.close();  
                }
     
                
    catch(Exception ex) 
                

                  ex.printStackTrace(); 
                }
     
              }
     
            }
    .start(); 
          }
    }
    );   
       
        
    // 設置缺省的窗口關閉行為,并顯示窗口。 
        f.setDefaultCloseOperation
        (JFrame.EXIT_ON_CLOSE); 
        f.setVisible(
    true); 
      }
     
    }
    posted on 2007-11-01 13:44 lk 閱讀(2466) 評論(0)  編輯  收藏 所屬分類: j2se
    主站蜘蛛池模板: 麻豆一区二区免费播放网站| 一级毛片a免费播放王色| 亚洲色大成网站www永久| 亚洲av永久无码精品国产精品| 亚洲v高清理论电影| 久久亚洲精品国产亚洲老地址| 亚洲AV综合色区无码一二三区| 夜夜爽妓女8888视频免费观看| 中文字幕在线观看免费视频| 在线免费观看色片| 亚洲色偷拍区另类无码专区| 亚洲国产精品热久久| 欧洲美女大片免费播放器视频| 久久久久久久99精品免费观看| 在线观看日本免费a∨视频| 国产午夜亚洲不卡| 亚洲国产综合精品中文第一| 中文字幕无码视频手机免费看| 亚洲欧美熟妇综合久久久久| 亚欧免费一级毛片| 亚洲欧洲自拍拍偷精品 美利坚 | 久久久久亚洲精品天堂久久久久久| 又粗又长又爽又长黄免费视频| 国产精品亚洲mnbav网站| 免费国产99久久久香蕉| 亚洲av无码一区二区三区天堂古代| 一级特黄aaa大片免费看| 亚洲色无码一区二区三区| 亚洲中文字幕无码中文| 57pao一国产成视频永久免费| www国产亚洲精品久久久| 亚洲欧洲国产精品久久| 在线观看片免费人成视频无码| 国产高清免费观看| 亚洲天堂一区在线| 国产成人精品男人免费| 两个人的视频www免费| 免费国产a国产片高清| 亚洲人成小说网站色| 亚洲国产精品尤物YW在线观看| 亚洲色中文字幕在线播放|