Tenho extrema urgencia nesse topico, eu preciso fazer um jogo que gerencie 6 conexoes, um jogo parecido com pife, mas estou tendo um grave problema no meu codigo, impossibilitando o debug e as consequentes alteracoes (correçao dos bugs) frequente nesse tipo de programa.
explicando meu codigo, é isso que o sistema faz, ele tem uma classe Ciente que inicia (tConexao.start()) uma thread conexao para conectar ao servidor (essa nao tem problema, esta funcionando corretamente). Tambem na classe Cliente tem uma thread que inicia o controle da interface (tInterface.start()) uso ela pra que a tela nao fique branca, é ela que inicia meu formCliente e usa um while(true) para dar um formConexao.repaint(500), o controle de ouvir o que o servidor fala e a atualizacao no formConexao pertence a classe Cliente ( que eu ainda nao pude testar devido a esse erro).
o erro: ao iniciar a thread tInterface (tinterface.start()) ele constroi a interface formCliente (formCliente = new FormCliente()) que por sua vez executa o formConexao.show() ou o setVisible(true) ambos ja foram testados, mas o formConexao.show() nao mostra para o usuario a tela de jogo, ele nem sequer aloca o form, e no decorrer da classe cliente apos ter startado a tInterface é atualizadas as cartas do formCliente por uma mensagem do servidor, nessa hora que da o erro, ja que o objeto nao foi alocado ainda.
bom isso é o que EU acho sobre o causador do erro, a pergunta é como fazer para que ele abra de forma instantanea e abra o form para o usuario… isso a thread nao deveria ja estar fazendo?
[code]
package cliente;
import java.net.;
import java.io.;
import javax.swing.;
import java.awt.;
public class Cliente {
private ThreadInterface tInterface;
private Conexao tConexao;
private int ID;
public Cliente() {
try {
tConexao = new Conexao();
try {
tInterface = new ThreadInterface();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao criar Interface: " + e.toString());
System.exit(1);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Impossivel Conectar ao servidor: " + e.toString());
System.exit(1);
}
JOptionPane.showMessageDialog(null, "Conectado.");
tConexao.start();
tInterface.start();
while (tInterface.formCliente.controle) {
try {
if (tConexao.msgServidor != null) {
String msg[] = tConexao.msgServidor.split(",");
// msg = Inicial,ID,cartas....
if (msg[0].equals("Inicial")) { // Aqui acontece o erro
tInterface.formCliente.atualizaCartas(msg[2]);
} else {
//msg = Reset,ID
if (msg[0].equals("Reset")) {
tInterface.formCliente.resetaMonte(Integer.parseInt(msg[1]));
tInterface.formCliente.AtualizaLabelEstadoJogador(
Integer.parseInt(msg[1]), "Rodou");
} else {
if (msg[0].equals("Jogou")) {
//msg = Jogou,ID,carta,N
tInterface.formCliente.atualizarCartaCorrente(tConexao.msgServidor);
tInterface.formCliente.AtualizaLabelEstadoJogador(
Integer.parseInt(msg[1]), "Jogou");
} else {
//msg = Passou,ID
if (msg[0].equals("Passou")) {
tInterface.formCliente.AtualizaLabelEstadoJogador(
Integer.parseInt(msg[1]), "Passou");
}
}
}
}
if (Integer.parseInt(msg[1]) == ID) {
tInterface.formCliente.enviar = 0;
}
tConexao.msgServidor = null;
tConexao.notify();
}
if (tInterface.formCliente.enviar > 0) {
String msg = null;
if (tInterface.formCliente.enviar == 1) {
msg = "Jogou," + Integer.toString(tInterface.formCliente.N) +
"," + Integer.toString(tInterface.formCliente.cartaAtual);
} else {
if (tInterface.formCliente.enviar == 2) {
msg = "Passou";
}
}
tConexao.envia_msg(msg);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro: sabe-se Deus onde. " + e.toString());
}
}
tConexao.fecha_conexao();
System.exit(0);
}
//<editor-fold defaultstate="collapsed" desc="Atualiza Interface Interface">
public class ThreadInterface extends Thread {
public FormCliente formCliente;
public ThreadInterface() {
formCliente = new FormCliente();
}
@Override
public void run() {
formCliente.show();
formCliente.criaCartas();
while (formCliente.controle) {
try {
formCliente.repaint(500);
} catch (Exception e) {
System.out.println("Erro no sleep: " + e.toString());
}
}
}
}
//</editor-fold>
}[/code]