Mensaje de error “excepción no informada java.io.IOException; debe ser atrapado o declarado ser arrojado “

Error:

filecontent.java:15: excepción no reportada java.io.IOException; debe ser atrapado o declarado arrojado

Mostrar archivo(); ^ archivocontenido.java:78: excepción no reportada java.io.IOException; debe ser atrapado o declarado arrojado

Mostrar archivo(); ^

Ya he lanzado java.io.IOException, pero aún muestra estos errores.

Mi código:

import java.awt.*; import java.awt.event.*; import java.io.*; class filecontent extends Frame implements ActionListener { TextField t[] = new TextField[4]; TextArea ta[] = new TextArea[4]; Button submit; Panel p1; filecontent() { setGUI(); setRegister(); showfile(); setTitle("FileData"); setVisible(true); setSize(300, 300); /* addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); */ } void setGUI() { p1 = new Panel(); p1.setLayout(new GridLayout(5, 4, 10, 10)); for(int i=0; i<4; i++) { t[i] = new TextField(10); ta[i] = new TextArea(""); p1.add(t[i]); p1.add(ta[i]); } submit = new Button("Submit"); p1.add(submit); } void setRegister() { submit.addActionListener(this); } void showfile() throws java.io.IOException { FileReader fin[] = new FileReader[4]; FileReader fn; // br[]=new BufferedReader[4]; for(int i=0;i<4;i++) { fin[i]=new FileReader(t[i].getText()); } int cnt = 1; String s; fn = fin[0]; BufferedReader br = new BufferedReader(fn); while(cnt <= 4) { if((s=br.readLine()) != null) { ta[cnt-1].append(s+""); } else { cnt++; fn = fin[cnt-1]; ta[cnt-1].setText(""); } } } public void actionPerformed(ActionEvent ae) { if(ae.getSource()==submit) { showfile(); } } public static void main(String ar[]) { new filecontent(); } } 

 void showfile() throws java.io.IOException <----- 

Su método showfile() arroja IOException , por lo que siempre que lo use tiene que atrapar esa excepción o volver a explorarla. Algo como:

 try { showfile(); } catch(IOException e) { e.printStackTrace(); } 

Deberías aprender sobre excepciones en Java .

El mensaje de error significa que cualquier método que llame a showfile() debe declarar que, a su vez, lanza IOException , o la llamada debe estar dentro de un bloque try que atrapa IOException . Cuando llamas a showfile() , no haces ninguno de estos; por ejemplo, su constructor filecontent no declara IOException ni contiene un bloque try .

La intención es que algún método, en alguna parte, contenga un bloque try , y capture y maneje esta excepción. El comstackdor intenta obligarlo a manejar la excepción en alguna parte.

Por cierto, este código es (lo siento por ser tan directo) horrible . No cierra ninguno de los archivos que abre, BufferedReader siempre apunta al primer archivo, aunque parece que intenta hacer que apunte a otro, los loops contienen errores uno a uno que causarán varias excepciones, etc. Cuando lo comstack, no funcionará como esperaba. Creo que necesitas disminuir la velocidad un poco.

Las excepciones burbujean en la stack. Si un llamante llama a un método que arroja una excepción marcada, como IOException, también debe capturar la excepción o lanzarla ella misma.

En el caso del primer bloque:

 filecontent() { setGUI(); setRegister(); showfile(); setTitle("FileData"); setVisible(true); setSize(300, 300); /* addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); */ } 

Tendría que incluir un bloque try catch:

 filecontent() { setGUI(); setRegister(); try { showfile(); } catch (IOException e) { // Do something here } setTitle("FileData"); setVisible(true); setSize(300, 300); /* addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); */ } 

En el caso del segundo:

 public void actionPerformed(ActionEvent ae) { if (ae.getSource() == submit) { showfile(); } } 

No puede lanzar IOException desde este método ya que su firma está determinada por la interfaz, por lo que debe capturar la excepción dentro de:

 public void actionPerformed(ActionEvent ae) { if(ae.getSource()==submit) { try { showfile(); } catch (IOException e) { // Do something here } } } 

Recuerde, el método showFile () arroja la excepción; eso es lo que la palabra clave “arroja” indica que el método puede arrojar esa excepción. Si el método showFile () está lanzando, entonces cualquier código que llame a ese método debe atrapar, o ellos mismos lanzan la excepción explícitamente incluyendo la misma adición de IOException a la firma del método, si está permitido.

Si el método anula una firma de método definida en una interfaz o superclase que tampoco declara que el método puede lanzar esa excepción, no puede declarar que arroje una excepción.

Su método showFile () declara que puede lanzar una IOException. Como se trata de una excepción comprobada, cualquier método de llamada a showFile () debe manejar la excepción de alguna manera. Una opción es envolver la llamada a showFile () en un bloque try-catch.

  try { showFile(); } catch(IOException e) { // Code to handle an IOException here } 

Cuando el destinatario lanza una excepción, es decir, void showfile () lanza java.io.IOException, la persona que llama debe manejarlo o lanzarlo nuevamente.

Y también aprender convenciones de nombres. Un nombre de clase debe comenzar con una letra mayúscula.