2013-04-09 84 views
-2

我創建了一個從客戶端到服務器的流。如何爲這段代碼創建ProgressMonitorInputStream或其他類似的東西?流的進度監視器

 FileInputStream fileStream = new FileInputStream(file); 
     int ch; 
     do 
     { 
      ch = fileStream.read(); 
      exitStream.writeUTF(String.valueOf(ch)); 
     } 
     while(ch != -1); 
     fileStream.close(); 

更新的代碼 - 該窗口出現,但它是空的。只有一個框架。如何解決它?

  String fileName = "aaa.jpg"; 
     File fileToBeSend = new File(fileName); 

     InputStream input = new ProgressMonitorInputStream(
     null, 
     "Reading: " + fileName, 
     new FileInputStream(fileToBeSend)); 

     int ch; 
     do 
     { 
      ch = input.read(); 
      exitStream.writeUTF(String.valueOf(ch)); 
     } while(ch != -1); 

     input.close(); 
+0

你已經做到了。問題是什麼? – EJP 2013-04-09 22:30:26

+0

讓我引用你的問題。因爲我發現你遇到了一個問題:「更新後的代碼 - 窗口出現,但它是空的,只有一個框架。」 – 2013-04-10 01:21:44

+0

這就是說,主要問題沒有得到解答。主要問題是:「如何創建ProgressMonitorInputStream或其他類似的代碼?」。 – 2013-04-10 01:30:42

回答

1

你的意思是,如何使用嵌套流,像這樣?

ProgressMonitorInputStream input = new ProgressMonitorInputStream(
     null, 
     "Reading: " + file, 
     new FileInputStream(file)); 

    ProgressMonitor monitor = input.getProgressMonitor(); 
    // do some configuration for monitor here 

    int ch; 
    do { 
     ch = input.read(); 
     // note: writing also the last -1 value 
     exitStream.writeUTF(String.valueOf(ch)); 
    } while(ch != -1); 

    input.close(); 
+0

@Noran我不知道'exitStream'是什麼,我只是複製粘貼和修改你的問題中的代碼... – hyde 2013-04-09 19:41:34

+0

「進度」窗口出現,但它是空的。裏面沒有進度條。PS:對不起。我很累,'exitStream'是我的語言翻譯後的名字。 – 2013-04-09 19:44:08

+0

當我使用@Vishal k上的代碼相同的情況發生。窗口出現,但它是空的。這只是一個框架。 – 2013-04-09 19:48:07

1

對於ProgressMonitorInputStream工作,你需要閱讀非常大的文件。在其文檔中指定:

這會創建一個進度監視器來監視讀取 輸入流的進度。 如果需要一段時間,ProgressDialog將彈出 以告知用戶。如果用戶點擊取消按鈕, InterruptedIOException將在下一次讀取時拋出。當流關閉時,所有正確的 清理完成。

這裏是例子。確保你輸入一個文件(bigFile.txt)包含很多東西來閱讀。

enter image description here

import java.awt.Color; 
import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

import javax.swing.JLabel; 
import javax.swing.ProgressMonitorInputStream; 

public class ProgressMonitorInputStreamDemo { 

    public static void main(String args[]) throws Exception { 
    String file = "bigFile.txt"; 
    FileInputStream fis = new FileInputStream(file); 
    JLabel filenameLabel = new JLabel(file, JLabel.RIGHT); 
    filenameLabel.setForeground(Color.black); 
    Object message[] = { "Reading:", filenameLabel }; 
    ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, message, fis); 
    InputStreamReader isr = new InputStreamReader(pmis); 
    BufferedReader br = new BufferedReader(isr); 
    String line; 
    while ((line = br.readLine()) != null) { 
    System.out.println(line); 
    } 
    br.close(); 
    } 
} 

注:如果你想看到ProgressBar,不管你是多麼的文件讀取小,你可以使用SwingWorker。看看this Post

+0

我可以自己找到這種教程。我正在爲主帖中引用的這個特定代碼尋求解決方案。因爲這一刻,我自己做這件事是個問題。 – 2013-04-09 19:09:57

+0

看看我寫在** Note **部分的帖子..當然,你可以找到教程..但我期望在閱讀這些教程和一些技巧後,你會很容易地解決你的問題... – 2013-04-09 19:50:51

+0

是的,我明白注意部分。但我並不需要它的小文件。所以我拿了足夠大的文件,然後出現窗口。但是這個窗口是空的。我已經嘗試過2個代碼,你有額外的流,並從@hyde。 – 2013-04-09 19:57:38