Problema com threads

4 respostas
E
/**
	 * Cria o socket de conexão com o servidor.
	 */
	private void criaSocket()
	{
		Thread threadConectar = new Thread(
				new Runnable()
				{
					public void run()
					{
						try
						{
							addTextoLog( "Tentando conectar em " + enderecoServidor + ":" + numPorta + "." );
							conexao = new Socket( InetAddress.getByName( enderecoServidor ), numPorta );
							addTextoLog( "Conexão estabelecida." );
							conectado = true;
						}
						catch ( IOException excecao )
						{
							addTextoLog( "Não foi possível conectar." );
							conectado = false;
						}
					}
				}
		);
		threadConectar.start();
	}
	
	/**
	 * Conecta ao servidor.
	 */
	private void conecta()
	{
		this.criaSocket();
		
		if ( conectado )
		{				
			menuItem[0][0].setEnabled( false );
			menuItem[0][1].setEnabled( true );
			menuItem[0][3].setEnabled( true );
			
			clienteThread = new Thread( this, "Cliente" );
			clienteThread.start();
		}
	}

	/**
	 * Executado quando o thread do cliente inicia, quando há conexão com a internet.
	 */
	public void run()
	{
		try
		{
			while ( true )
			{
				this.recebeStreams();
				this.processaConexao();
				this.fechaConexao();
			}
		}
		catch ( EOFException excecao )
		{
			this.addTextoLog( "Servidor foi encerrado." );
			this.fechaConexao();
		}
		catch ( SocketException excecao ) {
			excecao.printStackTrace();
		}
		catch ( IOException excecao ) {
			this.addTextoLog( "Ocorreu um erro de I/O." );
		}
	}

O problema é que o clienteThread não é executado, chega-se no método start() dele e não acontece nada… O problema é que se eu tirar o threadConectar, funciona perfeitamente… Alguém poderia me ajudar?

4 Respostas

cv1

Quem chama conecta()? O que acontece enquanto a conexao nao foi efetuada ainda, e conectado==false?

E

se conectado == false nao faz nada, pq se nao desse pra criar o socket ele voltaria pra funcao conecta()… A função conecta() é chamado via um JMenuItem

cv1

Ele sempre volta pra conecta(), independente de ter dado certo ou nao… e como tudo que vc ta fazendo no criaSocket eh criar e iniciar uma thread (que retorna na hora), voce esta retornando ao controle da conecta() antes de a outra thread ter terminado de conectar… :wink:

E

desculpa, mas não entendi… :frowning:

Criado 16 de fevereiro de 2005
Ultima resposta 17 de fev. de 2005
Respostas 4
Participantes 2