Modificando valor de uma variavel STATIC a partir de um método

4 respostas
H

Como as classes são muito compridas, acredito que conseguirei explicar por aqui…

Tenho uma variável estatica:

private static String lHost

pois esse valor é o mesmo por todos os objetos instanciados…

tenho um método getter e um setter para essa variável (tendo em vista que ela é private)… os métodos devem também ser STATIC?? (já tentei os dois, mas só pra saber mesmo)…

Bom, eu executo um método essa mesma classe: GerenciadorServer:

public void gerencia() - onde uma das primeiras linhas, ele chama o setLHost passando como argumento o String.valueOf(blablagetLocalHost) (método que me retorna o nome e ip local).

O fato é que a variável estática continua nula, nao estou conseguindo mudá-la, outra coisa curiosa, é que no DEBUG do eclipse a variável nao aparece na listinha (this, etc) onde aparecem as variaveis e seus valores antes e/ou depois de setados.

Alguém sabe como modifico o valor da mesma?

Obrigado!

4 Respostas

H

Bom lá vai a classe para quem quiser dar uma olhada:

package gerenciador;

import java.io.*;
import java.net.*;

public class GerenciadorServer {
	
	private String recebido = null;
	private String envia = "ok\n";
	private static String localHost;
	private int index;
	
	public String getRecebido() {
		return recebido;
	}
	
	public void setRecebido(String rec) {
		recebido = rec;
	}
	
	public String getEnvia() {
		return envia;
	}
	
	// trata e seta localHost
	public void setLocalHost( String localH ){
		index = localH.indexOf("/");
		localHost = localH.substring(index+1);
	}
	
	public String getLocalHost() {
		return localHost;
	}
	
	public void gerencia() throws Exception {
		
		//cria socket de comunicação com os clientes
		ServerSocket welcomeSocket = new ServerSocket(6968);
		
		// seta o LocalHost no server
		setLocalHost(String.valueOf(InetAddress.getLocalHost()));
		
		
		//espera a mensagem de algum cliente e trata
		while(true) {
			Socket connectionSocket = welcomeSocket.accept();
			
			BufferedReader recebidoDoCliente = 
				new BufferedReader( new InputStreamReader(connectionSocket.getInputStream()));
			
			//DataOutputStream enviaProCliente =
			//new DataOutputStream(connectionSocket.getOutputStream());
			
			recebido = recebidoDoCliente.readLine();
			
			if (recebido.length() > 0) {
				if ( recebido.substring(0,9).equals("BSMIPHOME")) {
					String ipDest = recebido.substring(9); // recebe o ipHome do outro e seta como meu ipDest
					GerenciadorClient client = new GerenciadorClient();
					client.setIpDest(ipDest);
					System.out.println(recebido); //debug
				}
				else {
					System.out.println(recebido);
				}
				
				String confirma = "MensagemRecebida!";
				//client.gerencia(1, confirma);
			}
			
			welcomeSocket.close();
			//enviaProCliente.writeBytes(envia);
			
		}
	}

}
ViniGodoy

Ele não precisa ser necessariamente static. Métodos comuns podem acessar atributos estaticos normalmente.

Entretanto, normalmente é bom que ele seja. Assim você enfatiza que a propriedade é válida para a classe toda, não somente para o objeto em questão.

H

a questão é que nao está acessando…
o resultado no final é NULL.

se eu mudo a variável para não-estática, ela é acessada e modificada normalmente, porém eu necessito que ela seja ESTÁTICA.

Obrigado!

peczenyj
// trata e seta localHost
 	public void setLocalHost( String localH ){
 		index = localH.indexOf("/");
 		localHost = localH.substring(index+1);
                System.out.println("Ola amigao, tudo bom ?");
                System.out.println("Saca so, vc passou a string: " + localH);
                System.out.println("O indexOf(/) eh " + index + "alias index deveria ser uma variavel de metodo e nao um atributo de classe...");
                System.out.println("Bom, ai vc vai pegar o index + 1 =" + index + 1);
                System.out.println("lala... " + localH.substring(index+1));        
                System.out.println("Certo ? Bom cara, eh isso boa sorte!!");

 	}
Criado 6 de fevereiro de 2007
Ultima resposta 6 de fev. de 2007
Respostas 4
Participantes 3