<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 閱讀(2461) 評論(0)  編輯  收藏 所屬分類: j2se
    主站蜘蛛池模板: 中文字幕 亚洲 有码 在线| 黄色成人免费网站| 久久www免费人成看国产片| 天黑黑影院在线观看视频高清免费 | 69天堂人成无码麻豆免费视频| 国产精品免费播放| 精品女同一区二区三区免费站| 亚洲一级毛片免费观看| 亚洲а∨天堂久久精品9966| 亚洲精品午夜视频| 亚洲最大中文字幕无码网站| 亚洲中文字幕乱码AV波多JI| 亚洲日本在线电影| 一道本不卡免费视频| ssswww日本免费网站片| 两个人看的www高清免费视频 | 亚洲区小说区图片区QVOD| 4444亚洲国产成人精品| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产亚洲人成网站在线观看不卡| 国产网站在线免费观看| 拔擦拔擦8x华人免费久久| 亚洲国产精品不卡毛片a在线| 国产精品亚洲mnbav网站 | 亚洲1234区乱码| 亚洲中文无码永久免| 亚洲综合在线成人一区| 亚洲国产精品久久久久久| 亚洲av女电影网| 亚洲av永久中文无码精品综合| 国产天堂亚洲精品| 亚洲一区二区三区免费视频| 亚洲最大的成人网| 中文无码成人免费视频在线观看| 中文字幕免费在线观看| 永久黄网站色视频免费直播| 亚洲av无码专区国产乱码在线观看| 国产精品亚洲二区在线| 国内自产拍自a免费毛片| 亚洲熟妇av一区二区三区| 国产成人精品日本亚洲18图|