Проблема с объектом класса доступа

#java #class

#java #класс

Вопрос:

Итак, проблема заключается в следующем. У меня есть графический интерфейс, который открывает JFileChooser, и пользователь выбирает файл, при нажатии OK вызывается новый класс (Amostra Sample = new Amostra (namefile), где namefile — абсолютный путь), и он собирается предварительно обработать некоторые данные из файла и отобразить их в графическом интерфейсе. Затем пользователь собирается вставить некоторые параметры, чтобы выполнить остальные действия с файлом и сохранить его. Проблема в том, что я не могу получить доступ к объекту «Sample», созданному в jButton1, и поскольку обработка занимает много времени, идеальным вариантом было бы иметь доступ к уже проделанной работе. Есть какие-нибудь подсказки?

 public class FormatFiles extends javax.swing.JFrame {

    /** Creates new form FormatFiles */
    public FormatFiles() {
        initComponents();
    }



    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        JFileChooser chooser = new JFileChooser();//Inicia Caixa Dialog
        FileNameExtensionFilter filter = new FileNameExtensionFilter("SNLT logs", "csv");//Restringe tipo de ficheiros  
        chooser.addChoosableFileFilter(filter);//Adiciona filtro á Caixa
        chooser.setAcceptAllFileFilterUsed(false);
        int returnVal = chooser.showOpenDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION)  {
            try {
                File ficheiro = chooser.getSelectedFile();
                jLabel3.setText(ficheiro.getAbsolutePath()); 
                String namefile = ficheiro.getAbsolutePath();
                File openAs = new File(namefile);
                FileReader in = null;
                //Opens File
                try {
                    in = new FileReader(openAs);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(FormatFiles.class.getName()).log(Level.SEVERE, null, ex);
                }
                //Load file into jTextArea1
                try {
                    jTextArea1.read(in, openAs.toString());
                } catch (IOException ex) {
                    Logger.getLogger(FormatFiles.class.getName()).log(Level.SEVERE, null, ex);
                }
                //Calls Amostra
                Amostra Sample = new Amostra(namefile);
                String segundos = Double.toString(Sample.getsec());
                jLabel7.setText(segundos);

            } catch (FileNotFoundException ex) {
                Logger.getLogger(FormatFiles.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(FormatFiles.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ParseException ex) {
                Logger.getLogger(FormatFiles.class.getName()).log(Level.SEVERE, null, ex);
            }
    }                                        
    }





    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String Accao = jTextField1.getText();
        JOptionPane.showMessageDialog(null,Accao);
        //Can't Access Sample from here...

    }                                        

    /**
     * @param args the command line arguments
     */



    public static void FormatFiles(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new FormatFiles().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JRadioButton jRadioButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration                   
}
  

Ответ №1:

Переместите объявление sample за пределы метода, чтобы он был доступен всему классу, также измените его, чтобы оно начиналось со нижнего регистра:

 public class FormatFiles extends javax.swing.JFrame {
     ....
    Amostra sample;
     ....
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         ....
         sample = new Amostra(namefile);
         ....
    }
    ......
}
  

Ответ №2:

Разве вы не можете просто объявить это как переменную экземпляра?

Чтобы соответствовать наилучшей практике, переменная экземпляра должна быть private , а ее имя должно соответствовать стандартным соглашениям об именовании Java, начиная со строчной буквы; например

 private Amostra sample;