Java FTP не работает внутри SwingWorker Thread

У меня есть простая программа с графическим интерфейсом, которая выполняет некоторые взаимодействия с базой данных, а затем, после ее завершения, передает некоторые файлы на сервер. Это работало отлично, пока я не добавил поток SwingWorker для поддержки отзывчивости графического интерфейса.

Код, который я использую, работает нормально, если я помещаю его в отдельный проект, но внутри этого проекта (поток SwingWorker) он дает мне следующую ошибку:

java.net.SocketException: Software caused connection abort: recv failed

at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at sun.nio.cs.StreamDecoder.read0(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at it.sauronsoftware.ftp4j.NVTASCIIReader.readLine(NVTASCIIReader.java:105)
at it.sauronsoftware.ftp4j.FTPCommunicationChannel.read(FTPCommunicationChannel.java:142)
at it.sauronsoftware.ftp4j.FTPCommunicationChannel.readFTPReply(FTPCommunicationChannel.java:187)
at it.sauronsoftware.ftp4j.FTPClient.openActiveDataTransferChannel(FTPClient.java:3511)
at it.sauronsoftware.ftp4j.FTPClient.openDataTransferChannel(FTPClient.java:3475)
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2641)
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2550)
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2421)
at GUI$MatchFiles.doInBackground(GUI.java:1602)
at GUI$MatchFiles.doInBackground(GUI.java:1)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Есть идеи?

РЕДАКТИРОВАТЬ: я предполагаю, что вы имеете в виду что-то вроде этого? Обратите внимание, что это очень урезанная версия, я удалил много лишнего кода. Я не вижу, как это влияет на это.

class Worker extends SwingWorker<Integer, Integer>{
    protected Integer doInBackground() throws Exception{
        FTPClient client = new FTPClient();
        client.connect(url);
        client.login(username, password);
        client.setPassive(false);
        client.changeDirectory(uploaddirectory);
        client.upload(new File(fileuploadpath));
        client.disconnect(true);
    }

    protected void done() {                
        System.out.println("Done");                 
    }
}

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

1 ответ

Похоже, ваш сокет отключен брандмауэром или антивирусом... Попробуйте отключить брандмауэр и антивирус и перезапустите программу...

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