Я работаю над проектом, который передает файлы по сети, и я хочу включить JProgressBar, чтобы показать прогресс во время передачи файлов, но мне нужна помощь в этом.
вики сообщества? Действительно?




Что ж, здесь - это учебник для JProgressBar, возможно, это поможет.
Похоже, вам следует использовать SwingWorker, как описано в этот базовый технический совет по Java. См. Также Использование Swing Worker Thread.
Вы, вероятно, найдете 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;
}
Я почти уверен, что это сработает.
Предлагаю вам взглянуть на канал java nio для копирования файлов.
FYI out.write (buffer, current, bytesRead) должен быть out.write (buffer, 0, bytesRead)
Вы должны подробнее рассказать, в чем именно вам нужна помощь. Разбивается ли каждый файл на пакеты или вы просто знаете, когда передача каждого файла завершена? У вас есть процент, и просто нужна помощь с отображением? У вас уже сделана процедура копирования файлов?