Como acessar uma variavel de outra classe

8 respostas
J

Oi, gostaria de saber como faço pra acessar uma variavel de uma classe java através de outra classe, pensei que fosse com extends, mas nao deu certo, gostaria de acessar uma variavel da classe EnvioMensagemClient através da classe EnvioMensagemServer, alguem sabe como?
P.S. as classes estao no mesmo package

EnvioMensagemClient:
import java.rmi.*;

public class EnvioMensagemClient {
	public static String voltou  = new String();
	
	
	
	public static void main(String args[]) {
		//System.setSecurityManager(new RMISecurityManager());
		String url = "rmi://" + args[0] + ":1099/";
		try {
			EnvioMensagem c1 = (EnvioMensagem) Naming.lookup(url + "EnvioMensagem");
			c1.setDescription(args[1]);
			System.out.println("Envio da Mensagem: " + args[1]);
			voltou = c1.getDescription();
			System.out.println("Volta da Mensagem: " + voltou);
						
		} catch (Exception e) {
			System.out.println("Error" + e);
		}
	}

}
EnvioMensagemServer:
import java.rmi.*;
import java.io.*;
 
public class EnvioMensagemServer {
	
	
	public static void main(String args[]) {
		
		File arquivo = new File("dados.txt");
		try {
			System.out.println("Construindo implementacao de servidor...");
			EnvioMensagemImpl p1 = new EnvioMensagemImpl();
			System.out.println("Registrando servidor no SN...");
			Naming.rebind("EnvioMensagem", p1);
			System.out.println("Esperando chamadas...");
						
			// Gravando no arquivo  
	        	        
	        FileOutputStream fos = new FileOutputStream(arquivo);  
	        fos.write(EnvioMensagemClient.voltou.getBytes());  
	        fos.close();  
	  
	        // Lendo do arquivo
	        
	        arquivo = new File("dados.txt");  
	        FileInputStream fis = new FileInputStream(arquivo);  
	  
	        int ln;  
	        while ( (ln = fis.read()) != -1 ) {  
	            System.out.print( (char)ln );  
	        }  
	            
	        fis.close();  
	      
	 
		} catch (Exception e) {
			System.out.println("Error" + e);
		}
	}
}

8 Respostas

Flavio05

Para resolver seu problema, procure aprender sobre os métodos getters e setters. Que são utilizados, respectivamente, para a consulta e alteração do valor das variáveis de uma classe. Isso também é chamado de encapsulamento de variáveis.

Dê uma olhada…
http://www.guj.com.br/java/52005-getters-e-setters
http://www.guj.com.br/java/136264-setter-e-getter

J

e se eu adicionar a linha

EnvioMensagemClient EnvioMensagemClient = new EnvioMensagemClient();

no codigo do server, eu nao posso por exemplo utilizar a variavel do voltou do client?

Flavio05

jct:
e se eu adicionar a linha

EnvioMensagemClient EnvioMensagemClient = new EnvioMensagemClient();

no codigo do server, eu nao posso por exemplo utilizar a variavel do voltou do client?

Crie um método get para esta variável.

Dentro da classe EnvioMensagemClient.

public String getVoltou(){
return voltou;
}

Assim, através dessa instância você pode recuperar o valor da variável.

EnvioMensagemClient envioMensagemClient = new EnvioMensagemClient();
envioMensagemClient.getVoltou();
yfalbino

da uma olhada neste projeto, acho que é +/- a sua duvida…

J

Eu fiz mais simples, coloquei a variavel como static e usei EnvioMensagemClient.voltou pra chamar a variavel volotou em outra classe, nao da nenhum erro, mas na hora de gravar o que digito no dados.txt ela nao grava, até cria o arquivo, mas cria tudo em branco, minha classe ficou assim.

package inicial;

import java.rmi.*;
import java.io.*;
 
public class EnvioMensagemServer {
	
	
	public static void main(String args[]) {
		EnvioMensagemClient EnvioMensagemClient = new EnvioMensagemClient();
		File arquivo = new File("dados.txt");
		try {
			System.out.println("Construindo implementacao de servidor...");
			EnvioMensagemImpl p1 = new EnvioMensagemImpl();
			System.out.println("Registrando servidor no SN...");
			Naming.rebind("EnvioMensagem", p1);
			System.out.println("Esperando chamadas...");
						
			// Gravando no arquivo  
	        	        
	        FileOutputStream fos = new FileOutputStream(arquivo);  
	        fos.write(EnvioMensagemClient.voltou.getBytes());  
	        fos.close();  
	  
	        // Lendo do arquivo
	        
	        arquivo = new File("dados.txt");  
	        FileInputStream fis = new FileInputStream(arquivo);  
	  
	        int ln;  
	        while ( (ln = fis.read()) != -1 ) {  
	            System.out.print( (char)ln );  
	        }  
	            
	        fis.close();  
	      
	 
		} catch (Exception e) {
			System.out.println("Error" + e);
		}
	}
}
nao sei o que ta acontecendo.
yfalbino

aparentemente não tem nada de errado, mas tente dar uma olhada na sua classe EnvioMensagemClient, talvez o erro esteja lá

J

Acho que deve ser naquele getbytes(), por que o eclipse nao acusa nenhum erro, nao consigo entender porque nao ta gravando no dados.txt, mas vou dar mais uma olhada nisso.

yfalbino

pode ser que seja mesmo, da mais uma olhada, vai que voce acha o erro, e se for preciso, refaça a classe…

Criado 20 de abril de 2013
Ultima resposta 21 de abr. de 2013
Respostas 8
Participantes 3