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