如何使用JProgressBar显示文件复制进度?

我正在开发一个通过网络传输文件的项目,我想要合并一个JProgressBar来显示文件传输过程中的进度,但我需要帮助。

你可能会发现一个最简单的ProgressMonitorInputStream,但如果这对你来说做得不够,请查看它的源代码以获得你想要的。

  InputStream in = new BufferedInputStream( new ProgressMonitorInputStream( parentComponent, "Reading " + fileName, new FileInputStream(fileName) ) ); 

要使用不同的传输方法,请将适当的流替换为FileInputStream。

 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import javax.swing.JProgressBar; .... public OutputStream loadFile(URL remoteFile, JProgressBar progress) throws IOException { URLConnection connection = remoteFile.openConnection(); //connect to remote file InputStream inputStream = connection.getInputStream(); //get stream to read file int length = connection.getContentLength(); //find out how long the file is, any good webserver should provide this info int current = 0; progress.setMaximum(length); //we're going to get this many bytes progress.setValue(0); //we've gotten 0 bytes so far ByteArrayOutputStream out = new ByteArrayOutputStream(); //create our output steam to build the file here byte[] buffer = new byte[1024]; int bytesRead = 0; while((bytesRead = inputStream.read(buffer)) != -1) //keep filling the buffer until we get to the end of the file { out.write(buffer, current, bytesRead); //write the buffer to the file offset = current, length = bytesRead current += bytesRead; //we've progressed a little so update current progress.setValue(current); //tell progress how far we are } inputStream.close(); //close our stream return out; } 

我很确定这会奏效。

听起来您应该使用SwingWorker , 如此核心Java技术提示中所述 。 另请参阅使用Swing Worker线程 。

那么这里是JProgressBar的教程,也许这会有所帮助。