Erro com comparação de string

13 respostas
R

galera,

não tenho experiência com java... programo em c++, php, vb e tal... mas, vendo um exemplo de comunicação com ftp via java, resolvi me aventurar a tentar fazer oq eu precisava...

o contexto é o seguinte... preciso me conectar a um ftp e disparar um alarme quando um novo arquivo for detectado... ou seja... programa fica rodando e quando aparecer um arquivo novo na pasta aparece o alerta.

está tudo indo bem... conecto, o servidor me retorna a lista de arquivos, guardo isso em uma String e entro em um loop q fica pegando a lista e comparando o ultimo arquivo com oq eu peguei antes... nao tive q me preocupar com ordenação pq meus arquivos tem nomes sequenciais e sempre o último é o último msm... =)

obrigado pela colaboração e desculpem algum erro grotesco, java (ainda) não é minha praia

import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.applet.AudioClip;
import javax.sound.midi.Soundbank;
import javax.swing.*;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPClient;

public class myFTP {
    public static void main( String[] args ) {
        String nomeArquivo = null;
        FTPClient ftp = new FTPClient();
        try {
            ftp.connect( "local.newsom.com.br" );
            
            //verifica se conectou com sucesso!
            if( FTPReply.isPositiveCompletion( ftp.getReplyCode() ) ) {
                ftp.login( "record_ring", "88088" );
            } else {
                //erro ao se conectar
                ftp.disconnect();
                System.out.println("Conexão recusada");
                System.exit(1);
            }
            
            String[] arquivos = ftp.listNames();
            String ultimo = arquivos[arquivos.length - 1];
            int x=0;
            boolean parar=true;
            do{
                System.out.println("Loop"+x);
                x++;
                String[] arquivos_checa = ftp.listNames();
                String checa = arquivos_checa[arquivos_checa.length - 1];
                if (!checa.equals(ultimo)) {
                    JOptionPane.showMessageDialog(null,"Novo arquivo encontrado: "+checa);
                    ultimo = checa;
                    break;
                } else {
                    System.out.println("Não há novos arquivos\n");                    
                }
                
            } while (true);
     
            ftp.disconnect();
            System.out.println("Fim. Tchau!");
        } catch( Exception e ) {
            System.out.println("Ocorreu um erro: "+e);
            System.exit(1);
        }
    }
}

13 Respostas

clodoaldoaleixo

Faltou dizer qual o erro…

D

Ok! Mto legal seu código… hehehehehe agora, qual o problema?

T

Tem um “erro” no seu código que é a forma
que implementou o loop… Monitore o processamento
para ver o que ocorre! Sugiro que utilize uma um TimerTask
da java.util.

abraços

R

sim, sim, vamos ao erro! hehehe!

quando faço if (!checa.equals(ultimo)) o message dialog nao aparece e o programa, apesar de parar, nao encerra como eu esperava…

RenataFA

Ok, vc disse que o dialog não aparece, certo? Tente colocar um “sysout” dentro do IF para que possamos ter certeza de que o problema está no dialog e não no IF, ou seja, tá entrando no IF, mas o dialog não está exibindo.
Algo como fiz abaixo:

if (!checa.equals(ultimo)) { System.out.println("vai mostrar o dialog"); //aqui JOptionPane.showMessageDialog(null,"Novo arquivo encontrado: "+checa); System.out.println("já mostrou o dialog"); //aqui ultimo = checa; break; } else { System.out.println("Não há novos arquivos\n"); }

Me diga qual foi o resultado deste teste por favor,

Outra coisa, vc diz:

O que seria a forma esperada para vc? E como ele está parando?

Aguardo resposta!

[]'s

R

Renata, fiz como vc sugeriu e olha só o output…


Loop7
Não há novos arquivos

Loop8
Não há novos arquivos

Loop9 //nessa hora eu joguei um arquivo no ftp
vai mostrar o dialog

e fica parado nisso… o final q eu esperava era que caisse no ftp.disconnect e fechasse o programa

obrigado =)

nbluis

Cara, faz assim.
Primeiro organiza teu código orientado a objetos.
Que dai vai ficar muito mais fácil de tu fazer este debug.

Isso parece aqueles programas hello world de faculdade feito em pascal, quem sabe troca o nome da classe para Deus é pai

R

nbluis,

fiquei a vontade em perguntar e mostrar meu código aqui por entender ser um fórum de iniciantes. Desculpe caso só códigos bem-estruturados e orientados a objeto possam ser debugados.

nbluis

Desculpe, não quis ofender.

Mas realmente é muito dificil debugar códigos assim.

E isso não vale pra mim, e sim para você.Assim faz com que consiga direcionar sua dúvida e partir para uma ajuda específica, o que é melhor para todos.

indiao_uba

Ola, primeiramente fique ofendido com outras pessoas… garanto que não foi essa a intenção…

Qnto ao código… faça o seguinto joga um System.out.prinln dentro do seu if (!checa.equals(ultimo)) para ver se ele esta realmente caido la dentro, se estiver mude o esquema de break use um while(varialvel!=false) e dentro do if vc seta variavel=true pra dar break, testa isso.

R

india, segui seu conselho mas nao adiantou mta coisa nao… o código roda bonito, mas pára antes de mostrar o message dialog (coloquei dois system.out: um antes outro dps do messagedialog, só mostra o de antes)

RenataFA

Bom, vc está usando assim:

JOptionPane.showMessageDialog(null,"Novo arquivo encontrado: "+checa);

Faça outro teste, se vc comentar a linha acima e deixar apenas um “sysout” pra imprimir no console o alerta de qdo encontrar um novo arquivo, funciona? Pq se for assim, indica q o problema está no dialog.

Outra coisa, vc está usando uma construção para o dialog na qual vc passa null no primeiro parâmetro (que deveria ter o objeto parent). Qdo se faz como vc fez, existem changes do dialog abrir atrás da sua aplicação, ou atrás de qq programa que vc tenha aberto de forma que vc não perceba, mas na verdade o dialog está lá, esperando seu “OK” e por isso parece que a aplicação está travada.

Faça este teste tb. então, rode o programa normalmente como está, e qdo ele “parar”, tecle alt+tab e veja se por acaso o bendito dialog não está em algum lugar…

:wink:

R

pessoal, consegui! =)

a renata tinha razão, o option pane estava por trás de outras janelas e nao aparecia… agora tá tudo certinho… implementei tmb uma thread invés do loop infinito porco…

agora vou me aventurar em fazer uma interfacezinha… qnd tiver tdo ok eu posto aí o meu “ftp new-file alarm java-powered”
uauhauh

abraços!

Criado 3 de abril de 2007
Ultima resposta 6 de abr. de 2007
Respostas 13
Participantes 7