Eu tenho um programa com interface gráfica que é um servidor Socket para um microterminal, e nesse programa, na formulário principal tem uns Label’s que mostram o status do servidor (se a porta do socket está aberta, se o banco de dados esta ok, entre outros…). Mas como eu preciso que ele seja multiusuario e atualize a interface gráfica enquanto o cliente realiza operações eu estou usando Thread’s.
Então eu criei uma classe para Thread dentro da classe do programa, e o problema é: da classe Thread eu não consigo atualizar os Label’s de status e nem usar o método append na TextArea de log, eu já instanciei a classe do programa dentro da classe da Thread e coloquei lá os labels para serem alterados, mas não acontece nada!
Eu não tenho certeza mas acho que é porque eu estou fazendo alterações em “outra janela” que não esta visível, pois eu instanciei assim:
e uso o append assim:
mas não está acontecendo nada!
Obs: Não da erro algum, pelo contrario, funciona perfeitamente pois coloquei dentro do mesmo try do append um JOptionPane pra falar se dava certo ou não e ele apareceu…
Não é exatamente assim mas é parecido. Primeiro porque minha aplicação é de desktop.
Segundo, eu quero manipular um label de uma classe atraves de outra, meu codigo funciona assim: No classe principal tem duas classes, a main:
e a classe para tratar os clientes:
e dentro da classe main está declarado os labels que eu quero alterar e uma TextArea para ficar o log. Acontece que na classe da Thread eu abro uma porta e quero colocar no Label que está na main() que ela está aberta, mas o label está em outra classe, o mesmo acontece com o log, eu recebo um cliente por Socket e tenho que adicionar um lembrete no log.
Tópico movido para o fórum de interface gráfica. Poderia ser Java Avançado também, já que envolve threads.
Mas não Java Básico. Por favor, leia com atenção a lista de tópicos antes de postar. Isso facilita também a quem vai te responder distinguir se a dúvida é de Swing ou de web.
Eu estava fazendo algo parecido, já tinha passado como parâmetro, e também tava fazendo certinho a inicialização da thread. Modifiquei o código pra ficar parecido com esse dai mas não deu certo… Ele continua não mostrando nada e ainda por cima da NullPointerException quando tento usar o home.log.append(texto);
Para que não fique poluída a página, eu coloquei o documento no google Docs, até porque tem mais de 500 linhas ^^
ViniGodoy eu coloquei o post no Java básico porque minha dúvida é só entre manipular elementos de outra classe, podia nem ter threads e eu não tinha visto o fórum de interface gráfica…
[quote=Yago Ernandes]Eu estava fazendo algo parecido, não muito. Modifiquei o código pra ficar parecido com esse dai mas não deu certo… Ele continua não mostrando nada e ainda por cima da NullPointerException quando tento usar o home.log.append(texto);
[/quote]
Nesse código você continua não fazendo o que eu falei. No clientthread, você tem 2 construtores. Mas no segundo construtor, você nem sequer está mexendo no valor de gui.
Já que você não usa o primeiro construtor (o que tem só um parâmetro) apague-o. E altere o segundo construtor para:
Passe o home que você já criou na quinta linha do seu main.
Usar new home() não serve, pois isso criaria uma tela diferente para cada thread.
Outra coisa, procure seguir as convenções de código do Java. Nome de classes começa com letras maiúsculas. Variáveis e funções com letras minúsculas.
Você poderá se perder facilmente se deixar tudo com letra minúscula.
Fiz o seguinte… Usei o home da quinta linha lá que você disse e defini ele como final(culpa do NetBeans) e no construtor da main coloquei tambem pra ele inicar o main que eu ja tinha iniciado.