Aplicação trava no Java Swing com FTP

Tenho uma aplicação em Java Swing que trava toda vez que chamo um método para conectar no servidor de FTP. Isolei o código e descobri que ele está travando na linha ftp.connect. Outra curiosidade é que chamando o método sem utilizar o Swing, funciona perfeito. Segue o código com o método TransEXC():

import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
 
public class Transfer {
    
    FTPClient ftp = new FTPClient();
    String ftpurl="localhost";
    int porta=21;
    JTextField campouser = EscalabilidadeAIPView.jUser;
    String user = campouser.getText();
    JPasswordField camposenha = EscalabilidadeAIPView.jPass;
    String pass = camposenha.getText();
    
    public void TransEXC() throws IOException, SocketException {
    
    try {        
          ftp.connect(ftpurl,porta);
          ftp.login( user, pass );
          int status = ftp.getReplyCode();
          System.out.println(status);
          if (status == 530) {
              JOptionPane.showMessageDialog(null, "Login incorreto\n"
                      + "Abortando processo EXCEÇÃO!\n", 
                      "ERRO", JOptionPane.ERROR_MESSAGE);
              System.out.println(status);
              return;
          }
    } catch (Exception e) {
        String ERROR = e.toString();
            if ("java.net.ConnectException: Connection timed out: connect".
                    equals(ERROR)) {
                JOptionPane.showMessageDialog(null, "Tempo esgotado:\n" + 
                        ftpurl, "ERRO", JOptionPane.ERROR_MESSAGE);
            } else {
            JOptionPane.showMessageDialog(null, "Host desconhecido:\n" + ftpurl,
                    "ERRO", JOptionPane.ERROR_MESSAGE);
            }
            e.printStackTrace();
            System.exit(1);
      }
  }

Continua travando e não imagino mais onde encontrar solução…

Oi,

Pera lá… Como assim sem utilizar o Swing ?

Tchauzin!

Sem utilizar o Swing:

Criando uma classe Main e chamando o método.

Fiz um teste com o Windows 7 e não trava. O lance mesmo é com o XP.
O pior é que a interface do usuário é XP… Não sei como resolver isto.

SOLUÇÃO PALEATIVA

Consegui fazer rodar a aplicação, mas ao invés de chamar o método connect da classe FTPLogin, optei por fazer o programa gerar um script de login ftp, com os arquivos e servidor de destino. Depois ele chama diretamente o comando ftp.exe do Windows. O método ficou mas ou menos assim:

public void enviaArquivo() {
        JPanel principal = AplicacaoView.mainPanel;
            principal.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        try {
            File f = new File("c:/Transfer/ftp.txt");
            OutputStream os = (OutputStream)new FileOutputStream(f);
            String encoding = "ASCII";
            OutputStreamWriter osw = new OutputStreamWriter(os, encoding);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("open " + ftpurl + "\n" + user + "\n" + pass + "\n");
            bw.write("prompt\n" + "mput /Transfer/*.ovr\n" + "quit");
            bw.flush();
            bw.close();
            String comando = "cmd /c ftp -s:\\Transfer\\ftp.txt";
            Runtime.getRuntime().exec(comando);
        } catch (Exception e) {
            String ERROR = e.toString();
            JOptionPane.showMessageDialog(null, ERROR,
                    "ERRO", JOptionPane.ERROR_MESSAGE);
        } finally {
            principal.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        }
    }