Возобновить последний загруженный файл после исключения - PullRequest
0 голосов
/ 18 апреля 2019

Я использую Java SDK 1.11.534

В моем инструменте я объявил загрузку с именем «down», используя TransferManager,

с момента звонка:

down.waitForCompletion();

является блокирующим вызовом и останавливает подтверждение ProgressBar на ProgressListener Мне пришлось ввести SwingWorker следующим образом:

      SwingWorker worker = new SwingWorker<Void,Integer>(){


        @Override
        protected void process(List<Integer> chunks) {
            int j = chunks.get(chunks.size()-1);

            if (i<=fileNum) jLabel4.setText("Scaricamento file " + i+ " di " + fileNum + "  del DCP "+ DCPname+" in corso, attendere....");
            else jLabel4.setText("Scaricamento DCP "+ DCPname+" completato con successo.");

        }

        @Override
        protected Void doInBackground(){

            for (S3ObjectSummary file: fileList){
                  if((!isPresent(destination,file.getKey().substring(file.getKey().lastIndexOf("/") + 1),file.getSize())) && (!(file.getKey().substring(0, file.getKey().length()-1).equals(DCPname)))){

                      publish(i);



             GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, file.getKey());



             down = tx.download(getObjectRequest,new File(percorso+File.separator + file.getKey().substring(file.getKey().lastIndexOf("/") + 1)));

             down.addProgressListener(progressListener);



             try {
                 down.waitForCompletion();
             } catch (AmazonClientException ex) {

                 ex.printStackTrace();
                 tx.shutdownNow(true);
                 //jButton4.setEnabled(true);
                 jButton4.doClick();

             } catch (InterruptedException ex) {

                 ex.printStackTrace();
                 tx.shutdownNow(true);
                 //jButton4.setEnabled(true);
                 jButton4.doClick();

             }


          i++;  
         }

Это часть кода, где doInBackground() показывает операции, которые нужно выполнить.

Иногда бывает, что AmazonClientException сообщает:

Не все байты из S3inputstream были прочитаны

И это приводит к повреждению файла и остановке самой программы при исключении.

В начале моего кода (здесь не сообщается) до достижения декларации SwingWorker я заявил, что при нажатии jButton4 действие начинает проверять, есть ли несоответствие размера между файлами в папке загрузки и файлами на Amazon s3, и если есть усеченный файл, он удаляется, и имя снова добавляется в список загрузки.

Итак, единственное решение, которое я нашел на данный момент, это добавить следующий строчный код:

jButton4.doClick();

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

Мой вопрос:

Есть ли в SDK какой-либо способ возобновить или лучше отменить, а затем загрузить файл после исключения без перезапуска программы? Я нахожу использование:

jButton4.doClick();

не профессиональный способ кодирования.

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете извлечь содержимое метода действия клика в новый метод и вызвать его вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...