Acesso de variável em outra classe? help

Olá pessoal

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();

e me retona somente null, qual seria o erro?

Muito Obrigado pela atenção!

Debuga e ve se a variável caminho está recebendo mesmo alguma coisa…

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.

Essa frase é um clássico caso de variável estática, não seria melhor alterá-la?

Primeiramente não legal declarar uma variável publica e depois se ela é for pública pra que os get e set?

Acho que você está querendo declarar uma variavel estática.

public static final String cami;

Mesmo utilizando o public static final não funciona!

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;                     
    }

bom vc deveria tira o FINAL
msm tirando pra vc utilizar de metodos de outra classe vc deveria usar o get set