estou com problemas de acesso a uma váriavel (publica). desejo ter acesso a mesma váriavel mesmo estando em classes diferentes…
. drecretei minha variavel como publica (no construtor)
. dentro de um método ela recebe um valor
. e depois utilizo um get para que possa acessá-la porém só me retona null
qual poderia ser o problema???
um resumo do código:
public String cami;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(File_Open.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
log.append("Opening: " + file.getName() + "." + newline);
//essa é a variavel que preciso acessá-la
caminho = file.getPath();// aki a variavel recebe o dado necessário...
file = fc.getSelectedFile();
String arquivo = file.getPath();
} else {
log.append("Open command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
} else if (e.getSource() == saveButton) {
int returnVal = fc.showSaveDialog(File_Open.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
log.append("Saving: " + file.getName() + "." + newline);
} else {
log.append("Save command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
}
}
}
public String getCami() {
return caminho;
}
feito isso eu chamo a váriavel cami em outra classe dessa maneira:
File_Open f = new File_Open();
f.getCami();
Sempre utilize variareis privadas instancie o objeto ou injete com algum framwork(Spring por exemplo),
eh uma boa pratica vc usar variaveis de instancia com o modificador de acesso private eh gerar
metodos get´s e set´s públicos para acesso a esta variável .
Isso acontece porque sua variável pertence a uma instância…
Cada new XXX, onde XXX é sua classe, é uma nova instância e tera o valor inicial de sua variável como null.
Existem duas maneiras de fazer o que você precisa…
A primeira é utilizando um padrão chamado Singleton. Neste padrão você cria apenas uma instância da classe através de um método getInstance.
A segunda maneira seria compartilhar o mesmo valor entre todas as instância através do modificador static. Este modificador torna sua variável pertencente a classe, porém você deve tomar cuidado pois assim se este valor for modificado por uma instância será modificado para todas as outras e o valor antigo será perdido.
Se o modificador static não resolver seu problema procure por exemplos no fórum sobre o padrão Singleton.
Qualquer dúvida poste aqui novamente.
Vc está tentando usar o atributo de classe “caminho”, porém o nome deste atributo está declarado como “cami”.
Mude tudo de cami para Caminho que funciona, mas o legal é criar metodos de acesso e trocar o modificador do atributo para private.
private String caminho;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(File_Open.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
log.append("Opening: " + file.getName() + "." + newline);
setCaminho(file.getPath());
file = fc.getSelectedFile();
String arquivo = file.getPath();
} else {
log.append("Open command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
} else if (e.getSource() == saveButton) {
int returnVal = fc.showSaveDialog(File_Open.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
log.append("Saving: " + file.getName() + "." + newline);
} else {
log.append("Save command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
}
}
}
public void setCaminho(String novoCaminho){
caminho=novoCaminho;
}
public String getCaminho() {
return caminho;
}