Как использовать JProgressBar для отображения хода копирования файла?

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

Вы должны подробнее рассказать, в чем именно вам нужна помощь. Разбивается ли каждый файл на пакеты или вы просто знаете, когда передача каждого файла завершена? У вас есть процент, и просто нужна помощь с отображением? У вас уже сделана процедура копирования файлов?

Andrei Krotkov 15.01.2009 19:39

вики сообщества? Действительно?

David Koelle 15.01.2009 19:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
12 633
4

Ответы 4

Что ж, здесь - это учебник для 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 для копирования файлов.

Frederic Morin 10.04.2009 09:57

FYI out.write (buffer, current, bytesRead) должен быть out.write (buffer, 0, bytesRead)

Ed Griffin 11.03.2016 21:57

Другие вопросы по теме