【问题标题】:Progress monitor of stream [closed]流的进度监视器[关闭]
【发布时间】:2013-04-09 17:32:12
【问题描述】:

我创建了一个从客户端到服务器的流。如何为这段代码创建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();

【问题讨论】:

  • 你已经做到了。有什么问题?
  • 这意味着,这个主要问题没有得到回答。主要问题是:“如何为这段代码创建 ProgressMonitorInputStream 或其他类似的东西?”。

标签: java stream progress


【解决方案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();

【讨论】:

  • @Noran 我不知道exitStream 是什么,我只是复制粘贴并修改了您问题中的代码...
  • “进度”窗口出现,但它是空的。它里面没有进度条。PS:是的,对不起。我累了,exitStream 是从我的语言翻译过来的名字。
  • 当我使用来自@Vishal K 的代码时也会发生同样的情况。窗口出现但它是空的。这只是一个框架。
  • @Noran 注意确定问题可能是什么,但我会添加一些其他 GUI 代码以查看是否有效(如 google java gui hello world)。然后我会尝试配置进度监视器,在我的答案中编辑代码以获得模板。
  • 查看我的更新,也许有一些我看不到的小东西。经过大量时间编写代码后,这很有可能。
【解决方案2】:

要让ProgressMonitorInputStream 工作,您需要读取非常大的文件。其文件中规定:

这会创建一个进度监视器来监控阅读进度 输入流。 如果需要一段时间,会弹出一个 ProgressDialog 通知用户。 如果用户点击取消按钮 下次读取时将抛出 InterruptedIOException。没事 当流关闭时进行清理。

这是一个例子。确保您输入的文件 (bigFile.txt) 包含很多要阅读的内容。

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

【讨论】:

  • 这种教程我自己能找到。我正在为我在主帖中引用的这个特定代码寻求解决方案。因为此刻我一个人做这件事对我来说是个问题。
  • 看看我在 Note 部分写的帖子。是的,当然你可以找到教程。但我希望在阅读完这些教程之后可以轻松解决问题的提示...
  • 是的,我了解注释部分。但我真的不需要它来处理小文件。所以我为此准备了足够大的文件,然后出现了那个窗口。但是这个窗口是空的。我已经尝试了 2 个代码,你的代码有额外的流,还有一个来自 @hyde。
  • 然后发布您的更新代码..
  • 我已经发布了来自@hyde 的那个——因为现在它对我来说更简单、更直观。
猜你喜欢
  • 1970-01-01
  • 2015-07-21
  • 2010-10-17
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多