Uma luz no meu ftp!

3 respostas
dsombras

Pessoal é o seguinte…Eu estou Criando uma aplicação bem simples para ftp…Estou desenvolvendo o botão de deslogar ou desconectar do servidor ftp mas ele não desloga…

Eu estou usando os métodos disconnect() e logout() e ele não me retorna nada…ou eu não to fazendo direito…Estou utilizando a biblioteca commons-net-2.0…é a primeira vez que mexo com ftp entao eu posso estar viajando em algo

To postando o código nteiro embaixo

package ftp;

import java.io.IOException;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;


public class Ftp extends javax.swing.JFrame {

    /** Creates new form Ftp */
    public Ftp() {
        initComponents();
        
    }

    

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        painel1 = new javax.swing.JPanel();
        enviar = new javax.swing.JButton();
        listar = new javax.swing.JButton();
        st = new javax.swing.JLabel();
        status = new javax.swing.JLabel();
        deslogar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        l = new javax.swing.JLabel();
        s = new javax.swing.JLabel();
        e = new javax.swing.JLabel();
        senha = new javax.swing.JTextField();
        login = new javax.swing.JTextField();
        endereco = new javax.swing.JTextField();
        conecta = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        saida = new javax.swing.JTextArea();
        menu = new javax.swing.JMenuBar();
        arquivo = new javax.swing.JMenu();
        desconectar = new javax.swing.JMenuItem();
        sair = new javax.swing.JMenuItem();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        enviar.setText("Enviar arquivo");

        listar.setText("Listar arquivos no destino");
        listar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                listarActionPerformed(evt);
            }
        });

        st.setText("Status:");

        status.setText("Deslogado");

        deslogar.setText("Deslogar");
        deslogar.setEnabled(false);
        deslogar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deslogarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout painel1Layout = new javax.swing.GroupLayout(painel1);
        painel1.setLayout(painel1Layout);
        painel1Layout.setHorizontalGroup(
            painel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(painel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(painel1Layout.createSequentialGroup()
                        .addComponent(st)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(status))
                    .addComponent(enviar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(listar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(deslogar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        painel1Layout.setVerticalGroup(
            painel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(enviar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(listar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(deslogar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE)
                .addGroup(painel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(st)
                    .addComponent(status)))
        );

        l.setText("Login");

        s.setText("Senha");

        e.setText("Endereço");

        conecta.setText("Logar");
        conecta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                conectaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGap(36, 36, 36)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(l)
                            .addComponent(s)
                            .addComponent(e))
                        .addGap(12, 12, 12)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(senha, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
                            .addComponent(login, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(endereco, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE))))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(conecta)
                        .addGap(56, 56, 56)))
                .addGap(18, 18, 18))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(l)
                    .addComponent(login, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(s)
                    .addComponent(senha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(e)
                    .addComponent(endereco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(conecta)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        saida.setColumns(20);
        saida.setRows(5);
        jScrollPane1.setViewportView(saida);

        menu.setName("FTP"); // NOI18N

        arquivo.setText("Arquivo");

        desconectar.setText("Desconectar");
        desconectar.setEnabled(false);
        desconectar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                desconectarActionPerformed(evt);
            }
        });
        arquivo.add(desconectar);

        sair.setText("Sair");
        sair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sairActionPerformed(evt);
            }
        });
        arquivo.add(sair);

        menu.add(arquivo);

        jMenu1.setText("Configurações");

        jMenuItem1.setText("Configurar usuário");
        jMenu1.add(jMenuItem1);

        menu.add(jMenu1);

        setJMenuBar(menu);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(14, 14, 14)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 472, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(painel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(painel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(35, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    
    

private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
    System.exit(0);
}                                    

private void desconectarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
            
            conn.logout();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.logout()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            conn.disconnect();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.disconnect()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    desconectar.setEnabled(false);
    deslogar.setEnabled(false);
    status.setText("Deslogado");
    login.setVisible(true);
    senha.setVisible(true);
    endereco.setVisible(true);
    l.setVisible(true);
    s.setVisible(true);
    e.setVisible(true);
    conecta.setVisible(true);
    
}                                           


private void conectaActionPerformed(java.awt.event.ActionEvent evt) {
    
    end=endereco.getText();
    log=login.getText();
    sen=senha.getText();
    conn = new FTPClient();
        try {
            if(end.equals("")){
                saida.append("Campo endereço ainda está em branco\n");
            }else{
                conn.connect(end);
            }
            
        } catch (SocketException ex) {
            saida.append("Não foi possível conectar ao servidor Socket Exception"+ex.getMessage()+"\n");
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            saida.append("Não foi possível conectar ao servidor IO Exception"+ex.getMessage()+"\n");
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            if(log.equals("")){
                saida.append("Campo de login está em branco\n");
            }else{
                if(sen.equals("")){
                    saida.append("Campo senha está em branco\n");
                }else{
                    conn.login(log, sen);
                }
            }
            
        } catch (IOException ex) {                                       
            saida.append("Não foi possível logar no servidor IO Exception"+ex.getMessage()+"\n");
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
    
        try {
            arq = conn.listNames();
        } catch (IOException ex) {
            saida.append("Não foi possível listar os arquivos"+ex.getLocalizedMessage()+"\n");
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
            status.setText("Logado");
            login.setVisible(false);
            senha.setVisible(false);
            endereco.setVisible(false);
            l.setVisible(false);
            s.setVisible(false);
            e.setVisible(false);
            conecta.setVisible(false);
            deslogar.setEnabled(true);
            desconectar.setEnabled(true);
            

}

private void listarActionPerformed(java.awt.event.ActionEvent evt) {
    saida.append("\n\nListando arquivos: \n");

            for (String f : arq){

                 saida.append(""+f+"\n");           

            }
}

private void deslogarActionPerformed(java.awt.event.ActionEvent evt) {
    try {
            conn.logout();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.logout()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            conn.disconnect();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.disconnect()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
    desconectar.setEnabled(false);
    deslogar.setEnabled(false);
    status.setText("Deslogado");
    login.setVisible(true);
    senha.setVisible(true);
    endereco.setVisible(true);
    l.setVisible(true);
    s.setVisible(true);
    e.setVisible(true);
    conecta.setVisible(true);
    
}

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Ftp().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JMenu arquivo;
    private javax.swing.JButton conecta;
    private javax.swing.JMenuItem desconectar;
    private javax.swing.JButton deslogar;
    private javax.swing.JLabel e;
    private javax.swing.JTextField endereco;
    private javax.swing.JButton enviar;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel l;
    private javax.swing.JButton listar;
    private javax.swing.JTextField login;
    private javax.swing.JMenuBar menu;
    private javax.swing.JPanel painel1;
    private javax.swing.JLabel s;
    private javax.swing.JTextArea saida;
    private javax.swing.JMenuItem sair;
    private javax.swing.JTextField senha;
    private javax.swing.JLabel st;
    private javax.swing.JLabel status;
    // End of variables declaration
    FTPClient conn;
    
    private String log;
    private String sen;
    private String end;
    private String[] arq = null;
}

Caso eu consiga resolver o problema antes de alguem postar eu aviso e posto a minha solução

3 Respostas

Jair_Rillo_Junior

Bom dia

Por favor colocar tópicos mais explicativos.

Sobre o código, fica mais fácil você postar sempre a parte do código que está dando erro e não o código inteiro (fica mais fácil para as pessoas que estão com pouco tempo, ler sua dúvida e talvez te ajudar)

dsombras

Bom a parte que desconecta esta entre as linhas 233 e 259

Abaixo ta o trecho do código

private void desconectarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
            
            conn.logout();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.logout()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            conn.disconnect();
        } catch (IOException ex) {
            saida.append("Erro IOException  conn.disconnect()"+ex.getMessage());
            Logger.getLogger(Ftp.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    desconectar.setEnabled(false);
    deslogar.setEnabled(false);
    status.setText("Deslogado");
    login.setVisible(true);
    senha.setVisible(true);
    endereco.setVisible(true);
    l.setVisible(true);
    s.setVisible(true);
    e.setVisible(true);
    conecta.setVisible(true);
    
}

:oops: Desculpe a avalanche de código antes

dsombras

:smiley: :smiley: :smiley: :smiley:

Achei aonde estava o meu erro

Havia uma variável chamda arq que eu usava para listar os arquivos do servidor…
O que eu estava esquecendo era q quando eu deslogava essa variavel continuava com o valor que ela havia recebido quando eu usei ela antes, então foi só eu setar o valor dela para null no trecho em que eu desconecto dai ela zera e cabou o problema :oops:

:oops: :oops:

Agradeço a quem leu :oops:

Criado 10 de novembro de 2008
Ultima resposta 11 de nov. de 2008
Respostas 3
Participantes 2