[英]How do I use JProgressBar to display file copy progress?
我正在开发一个通过网络传输文件的项目,我想要合并一个JProgressBar
来显示文件传输过程中的进度,但我需要帮助。
You probably would find a ProgressMonitorInputStream easiest, but if that doesn't do enough for you, look at its source code to get exactly what you want. 您可能会发现最简单的ProgressMonitorInputStream,但如果这对您来说不够,请查看其源代码以获得您想要的内容。
InputStream in = new BufferedInputStream(
new ProgressMonitorInputStream(
parentComponent,
"Reading " + fileName,
new FileInputStream(fileName)
)
);
To use a different transfer method then substitute an appropriate stream for FileInputStream. 要使用不同的传输方法,请将适当的流替换为FileInputStream。
It sounds like you should be using a SwingWorker
, as described in this Core Java Tech Tip . 听起来您应该使用
SwingWorker
, 如此核心Java技术提示中所述 。 See also Using a Swing Worker Thread . 另请参阅使用Swing Worker线程 。
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;
}
I'm pretty sure this will work. 我很确定这会奏效。
那么这里是JProgressBar的教程,也许这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.