Foro sobre Java SE > Problema al llamar clase externa
¿Cuál es el error?
Publica la traza completa de la excepción.
El problema está, en el renglón que se muestra con error
"LeeTelefono LeeDatos.LeeDatos = new LeeTelefono();"
Hay un error en la declaración, que debe mostrar el compilador. Probablemente lo que quería declarar es:
LeeTelefono leeTelefono = new LeeTelefono();
Lo que no sé es quién es esa clase LeeTelefono.
¿No será LeeDatos?:
LeeDatos leeDatos = new LeeDatos ();
Voy a cambiar la pregunta para no entrar en confusiones.
Còmo hago para usar la clase llamada "LeeDatos", desde otro jframe que estoy utilizando?
Esa clase LeeDatos, tal y como está, no sirve para obtener los datos del archivo.
Como no sé exactamente los datos que necesitas, la clase lee todos los datos del archivo, y los almacena en un array.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class LeeDatos {
public String[] getDatos() throws FileNotFoundException {
List<String> datos = null;
File fichero = new File("Datos/Data.txt");
if (fichero.exists()) {
datos = new ArrayList<>();
Scanner lector = new Scanner(fichero);
while (lector.hasNextLine()) {
datos.addAll(Arrays.asList(lector.next().split("♪")));
}
lector.close();
}
return datos == null ? new String[0] : datos.toArray(new String[0]);
}
}
Se usa como sigue:
import java.io.FileNotFoundException;
import java.util.Arrays;
public class LeeDatosTest {
public static void main(String[] args) {
try {
String[] leeDatos = new LeeDatos().getDatos();
System.out.println("datos: " + Arrays.toString(leeDatos));
} catch (FileNotFoundException ex) {
System.out.println("No se pudo abrir el archivo!" + ex);
}
}
}
La clase que muestro a continuación funciona correctamente. Lo que necesito es que la clase interna llamada LeeDatos la pueda usar en otros Jframe, es decir una clase sola llamada LeeDatos y poder usarla desde cualquier otro Jframe.
package soporteinternet005;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class CPSS extends javax.swing.JDialog {
public CPSS(javax.swing.JDialog parent, boolean modal) {
super(parent, modal);
initComponents();
setTitle("Pruebas sin usar Spliter");
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jButton1.setText("SI");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("NO");
jButton3.setText("Inicio");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(47, 47, 47)
.addComponent(jButton1)
.addGap(79, 79, 79)
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 87, Short.MAX_VALUE)
.addComponent(jButton3)
.addGap(34, 34, 34))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(223, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)
.addComponent(jButton3))
.addGap(54, 54, 54))
);
pack();
}// </editor-fold>
File fichero = new File("Datos/Data.txt");
String[] datos;
//protected javax.swing.JTextField TelCod;
private void leeDatos() {
String linea = null;//Para guardar los datos de forma temporal
if (fichero.exists()) {//Si se ha creado el fichero
try {
Scanner lector = new Scanner(fichero);
while(lector.hasNextLine()){
linea=lector.next();
}
datos = linea.split("♪");
//TelCod.setText(datos[0]);
} catch (FileNotFoundException ex) {
System.out.println("No se pudo abrir el archivo!"+ex.getMessage());
}
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
leeDatos();
int Cod_cmdc = 0;
int tel = Integer.parseInt(datos[1]);
Cod_cmdc = (tel%10000) * 1102;
JOptionPane.showMessageDialog(null, "El spliter presenta una avería, por favor comuníquese con la línea 018000xxxxxx\n" +
"y reporte el código que se indica a continuación: \n\n" + Cod_cmdc +
"\n\nNota: si necesita urgentemente el servicio de internet puede dejar la conexión como està \n" +
"en este momento, pero, no tendrá línea telefónica de esa forma ", "Diagnóstico Final", JOptionPane.INFORMATION_MESSAGE) ;
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
CPSS dialog = new CPSS(new javax.swing.JDialog(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
// End of variables declaration
}
En ese código no hay ninguna "clase interna" llamada leeDatos. Hay un método privado con ese nombre, te refieres a eso?
Si, tienes razón, lo que quiero es que yo pueda usar ese método estando dentro de una clase, desde otros jframes.
Te puse más arriba un ejemplo completo de lo que quieres, incluyendo cómo se usa.
Solo tienes que adaptarlo a la salida de datos que necesitas.
Me parece algo extraño que tu método solamente captura los datos de la última línea del archivo; pero si es eso lo que necesitas, adaptar mi ejemplo es muy sencillo.
Como supongo que preferiras la solucion rapida a tu problema, puedes hacer el metodo public y static para que sea accesible desde otros sitios:
//protected javax.swing.JTextField TelCod;
private String[] leeDatos() {
File fichero = new File("Datos/Data.txt");
String[] datos;
String linea = null;//Para guardar los datos de forma temporal
if (fichero.exists()) {//Si se ha creado el fichero
try {
Scanner lector = new Scanner(fichero);
while(lector.hasNextLine()){
linea=lector.next();
}
datos = linea.split("♪");
//TelCod.setText(datos[0]);
} catch (FileNotFoundException ex) {
System.out.println("No se pudo abrir el archivo!"+ex.getMessage());
}
}
return datos;
}
Desde otros frames lo podras usar como:
String[] datos = CPSS.leerDatos();
Un saludo
Eso si, acuerdate de inicializar el array datos[], algo que curiosamente no veo que hagas nunca en tu codigo, por lo que no entiendo que te pueda funcionar...
@Uno
No le hace falta, siempre que se acuerde de asignar datos de un split
Si falla el split, o no hay líneas en el archivo, el resultado del método será null, lo que no es buena práctica.
Por eso el return de la clase que le he propuesto, nunca devuelve null.
Cierto, no me habia fijado en el split
Cordial saludo compañeros Hispanos.
Continúo en mi proyecto, tengo en un Jframe una clase que puede leer lo que tengo almacenado en un block de notas y si tengo la clase llamada dentro del Jframe, funciona con normalidad. Como es un proyecto que funciona con el paradigma de la programación orientada a objetos, debo tener en una clase aparte, que se llama "LeeDatos", los métodos que me permitan leer el block de notas y extraer lo que necesito desde diferentes jframes, estoy tratando de llamar la clase "LeeDatos" desde el jframe "MDVCE", pero, me aparece un error, agradezco su colaboración para poder resolver el problema. Cabe anotar que la falla se presenta al trabajar con la clase desde el jframe, ya que la parte de la lectura del block de notas, funciona bien. A continuación los códigos:
--------------------------------------
CLASE para leer los datos
package soporteinternet005;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class LeeDatos {
File fichero = new File("Datos/Data.txt");
String[] datos;
//protected javax.swing.JTextField TelCod;
private void LeeDatos() {
String linea = null;//Para guardar los datos de forma temporal
if (fichero.exists()) {//Si se ha creado el fichero
try {
File fichero = new File("Datos/Data.txt");
String[] datos; Scanner lector = new Scanner(fichero);
while(lector.hasNextLine()){
linea=lector.next();
}
datos = linea.split("♪");
//TelCod.setText(datos[0]);
} catch (FileNotFoundException ex) {
System.out.println("No se pudo abrir el archivo!"+ex.getMessage());
}
}
}
}
------------------------------------------------------
JFrame
package soporteinternet005;
import java.io.File;
import javax.swing.JOptionPane;
public class MDVCE extends javax.swing.JDialog {
public MDVCE(javax.swing.JDialog parent, boolean modal) {
super(parent, modal);
initComponents();
setTitle("Verificación de conexiones eléctricas");
}
File fichero = new File("Datos/Data.txt");
String[] datos;
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jLabel1.setFont(new java.awt.Font("Courier New", 0, 14)); // NOI18N
jLabel1.setText("<html>Verifique por favor, muy cuidadosamente las conexiones eléctricas,
"
+ "haga una conexión segura del cable de la energía eléctrica que
"
+ "conecta el adaptador con el tomacorriente, además, ajuste muy bien
"
+ "el cable del adaptador al módem en el puerto llamado power. Si la falla persiste, por favor,
"
+ "conecte el adaptador con el módem en otro tomacorriente para descartar
"
+ "que sea una falla de dicho tomacorriente.");
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/im_mdvce.JPG"))); // NOI18N
jLabel3.setFont(new java.awt.Font("Courier New", 0, 14)); // NOI18N
jLabel3.setText("Enciende o no enciende el módem?");
jButton1.setText("SI");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("NO");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 560, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(jLabel2))
.addGroup(layout.createSequentialGroup()
.addGap(43, 43, 43)
.addComponent(jLabel3))
.addGroup(layout.createSequentialGroup()
.addGap(134, 134, 134)
.addComponent(jButton1)
.addGap(134, 134, 134)
.addComponent(jButton2)))
.addContainerGap(56, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(23, 23, 23)
.addComponent(jLabel1)
.addGap(57, 57, 57)
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(26, 26, 26))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
MVN AbrirMVN = new MVN(new javax.swing.JDialog(), true);
AbrirMVN.setVisible(true);
dispose();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
LeeTelefono LeeDatos.LeeDatos = new LeeTelefono();
int Cod_cmdc = 0;
int tel = Integer.parseInt(datos[1]);
Cod_cmdc = (tel % 10000) * 5501;
dispose();
JOptionPane.showMessageDialog(null, "Debido a que el módem no enciende, se procede a escalar el caso,\n"
+ "por favor, comuníquese con la línea 018000xxxxxx e indique el código\n"
+ "que se muestra a continuación: \n\n" + Cod_cmdc, "Diagnóstico Final", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
MDVCE dialog = new MDVCE(new javax.swing.JDialog (), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
// End of variables declaration
}