You are on page 1of 12

IV.

Desarrollo de aplicaciones con manejo de archivos de texto y de excepciones en JAVA

Revisando Excepciones Existentes Entre algunas de las excepciones ya definidas en el sistema ms conocidas estn:

NullPointerException Se produce cuando se intenta acceder a una variable o mtodo antes de ser definido: public class Ejemplo { String hola; public static void main(String[] args) { System.out.println(hola); }

IncompatibleClassChangeException El intento de cambiar una clase afectada por referencias en otros objetos, especficamente cuando esos objetos todava no han sido recompilados. ClassCastException El intento de convertir un objeto a otra clase que no es vlida. y = (ClaseA)x; // donde x no puede ser de tipo ClaseA

NegativeArraySizeException Puede ocurrir si hay un error aritmtico al cambiar el tamao de un arreglo. OutOfMemoryException No debera producirse nunca!, pero sucede con el intento de crear un objeto con el operador new y este ha fallado por falta de memoria. Y siempre tendra que haber memoria suficiente porque el garbage collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema. NoClassDefFoundException Se hizo referencia a una clase que el sistema es incapaz de encontrar.

ArrayIndexOutOfBoundsException Es la excepcin que ms frecuentemente se produce. Se genera al intentar acceder a un elemento de un arreglo ms all de los lmites definidos inicialmente para ese arreglo. Ejemplo: int arreglo[] = new int[5]; arreglo[5] = 100; // no puede ser ya que solo existen del cero al cuatro

Creando Excepciones Un programador puede crear excepciones propias en Java, las cuales pueden ser utilizadas en diferentes aplicaciones. Las Excepciones se pueden crear, es decir puede haber excepciones definidas para que sean utilizadas en algunas aplicaciones en las que podemos incurrir en ellas, esto puede ser definido en alguna compaa en la que trabajemos, o por un mismo programador que desarrolle software en el que se desee reutilizar cdigo. Una manera fcil de manejar excepciones nuevas sera la de siempre hacerlas subclases de Throwable, como se muestra a continuacin: public class MiExcepcion extends Throwable { public MiExcepcion() { System.out.println("Se arrojo excepcin ma"); } } Con esto, las excepciones de MiExcepcion pueden ser lanzadas, declaradas y atrapadas como en el siguiente ejemplo: import java.io.*; public class AplicacionExcepcion5 { public static void metodo(String s) throws MiExcepcion { if ("feliz".equals(s)) { System.out.println("Son iguales."); } else { throw new MiExcepcion(); //se lanza } } public static void main(String[] args) throws IOException, MiExcepcion { BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String s; System.out.println("Da la palabra"); s = in.readLine(); metodo(s); } }

En este ejemplo observamos que si la palabra dada por el usuario coincide con feliz entonces se desplegar el mensaje son iguales, y la aplicacin terminar normalmente, por otro lado si la palabra no concuerda con feliz, entonces se lanzar la excepcin MiExcepcion y el mensaje se arrojo excepcin ma ser desplegado, veamos la ejecucin en ambos casos:

Throw La instruccin throw puede ser utilizada para lanzar una excepcin ya sea propia o del sistema, es decir nosotros podramos decir throw ArithmeticException, as como pusimos throw MiExcepcion, claro que no tendra razon que lanzramos una excepcin, lo importante es atraparla, es decir tener el try/catch correspondiente para cada una de las excepciones que podamos llegar a tener en nuestra aplicacin o applet. Aplicaciones con el uso de Excepciones Revisemos algunas aplicaciones pasadas que pudieran tener errores, cuyos errores pudieran ser ahora corregidos con el uso del try/catch, veamos el applet que utilizaba un arreglo: import java.awt.*; import java.applet.*; import java.awt.event.*;

// <applet width="400" height="200" code="AppletArreglos1"></applet> public class AppletArreglos1 extends Applet implements ActionListener{ Label l1, l2; Button b1, b2,b3,b4; TextField t1; TextArea ta1; int arreglo[]; int conta; public AppletArreglos1() { l1 = new Label("Dato a Aadir"); l2 = new Label("Texto para ver Arreglo"); t1 = new TextField(); ta1 = new TextArea(10,12); b1 = new Button("Aade"); b2 = new Button("Muestra Vector"); b3 = new Button("Limpia Vector"); b4 = new Button("Limpia Campos"); add(l1); add(t1); add(l2); add(ta1); add(b1); add(b2); add(b3); add(b4); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); arreglo = new int[100]; conta=0; } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == b1) { if (conta > arreglo.length) { ta1.setText("No se puede aadir otro elemento"); } else { arreglo[conta++] = Integer.parseInt(t1.getText()); t1.setText(""); } } if (ae.getSource() == b2) { ta1.setText(""); for (int i=0; i < conta; i++) { ta1.append("" + arreglo[i] + "\n"); } } if (ae.getSource() == b3) {

conta = 0; arreglo = new int[100]; } if (ae.getSource() == b4) { t1.setText(""); ta1.setText(""); }

} }

Si revisamos el applet podemos ver el problema de no validar si el dato que se teclea es un nmero, lo cual nos puede dar un error de ejecucin, como lo vemos en el ejemplo:

La mejor forma de revisarlo es usar el try/catch para que esto no funcione, como se indica: import java.awt.*; import java.applet.*; import java.awt.event.*; public class AppletArreglos1 extends Applet implements ActionListener{ Label l1, l2; Button b1, b2,b3,b4; TextField t1; TextArea ta1; int arreglo[]; int conta; public AppletArreglos1() { l1 = new Label("Dato a Aadir"); l2 = new Label("Texto para ver Arreglo"); t1 = new TextField(); ta1 = new TextArea(10,12); b1 = new Button("Aade"); b2 = new Button("Muestra Vector"); b3 = new Button("Limpia Vector"); b4 = new Button("Limpia Campos"); add(l1); add(t1); add(l2); add(ta1);

add(b1); add(b2); add(b3); add(b4); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); arreglo = new int[100]; conta=0; } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == b1) { if (conta > arreglo.length) { ta1.setText("No se puede aadir otro elemento"); } else { try { int numero = Integer.parseInt(t1.getText()); arreglo[conta++] = numero; } catch(NumberFormatException nfe) { ta1.setText("invalido " + nfe.toString()); } t1.setText(""); } } if (ae.getSource() == b2) { ta1.setText(""); for (int i=0; i < conta; i++) { ta1.append("" + arreglo[i] + "\n"); } } if (ae.getSource() == b3) { conta = 0; arreglo = new int[100]; } if (ae.getSource() == b4) { t1.setText(""); ta1.setText(""); } }

Observamos en el try, que nicamente despus de la instruccin que puede dar la excepcin, es que se aade el valor al arreglo, de tal manera que hacemos que sea solo un valor adecuado.

com .sun .corba .se .impl .corba .ExceptionListImpl com .sun .corba .se .impl .io .OptionalDataException com .sun .corba .se .impl .io .TypeMismatchException com .sun .corba .se .impl .logging .ActivationSystemException com .sun .corba .se .impl .logging .InterceptorsSystemException com .sun .corba .se .impl .logging .IORSystemException com .sun .corba .se .impl .logging .NamingSystemException com .sun .corba .se .impl .logging .OMGSystemException com .sun .corba .se .impl .logging .ORBUtilSystemException com .sun .corba .se .impl .logging .POASystemException com .sun .corba .se .impl .logging .UtilSystemException

com .sun .corba .se .impl .orbutil .threadpool .TimeoutException com .sun .corba .se .impl .presentation .rmi .ExceptionHandler com .sun .corba .se .impl .presentation .rmi .ExceptionHandlerImpl com .sun .corba .se .impl .presentation .rmi .IDLTypeException com .sun .corba .se .impl .protocol .AddressingDispositionException com .sun .corba .se .impl .protocol .RequestCanceledException com .sun .corba .se .spi .copyobject .ReflectiveCopyException com .sun .corba .se .spi .legacy .connection .GetEndPointInfoAgainException com .sun .corba .se .spi .orbutil .threadpool .NoSuchThreadPoolException com .sun .corba .se .spi .orbutil .threadpool .NoSuchWorkQueueException com .sun .corba .se .spi .protocol .ForwardException com .sun .image .codec .jpeg .ImageFormatException com .sun .image .codec .jpeg .TruncatedFileException com .sun .jmx .snmp .BerException com .sun .jmx .snmp .SnmpBadSecurityLevelException com .sun .jmx .snmp .SnmpSecurityException com .sun .jmx .snmp .SnmpStatusException com .sun .jmx .snmp .SnmpTooBigException com .sun .jmx .snmp .SnmpUnknownAccContrModelException com .sun .jmx .snmp .SnmpUnknownModelException com .sun .jmx .snmp .SnmpUnknownModelLcdException com .sun .jmx .snmp .SnmpUnknownMsgProcModelException com .sun .jmx .snmp .SnmpUnknownSecModelException com .sun .jmx .snmp .SnmpUnknownSubSystemException com .sun .jmx .snmp .daemon .CommunicationException com .sun .jmx .snmp .IPAcl .ParseException com .sun .mirror .type .MirroredTypeException com .sun .mirror .type .MirroredTypesException com .sun .org .apache .bcel .internal .ExceptionConstants com .sun .org .apache .bcel .internal .classfile .ClassFormatException com .sun .org .apache .bcel .internal .classfile .CodeException com .sun .org .apache .bcel .internal .classfile .ExceptionTable com .sun .org .apache .bcel .internal .generic .ClassGenException com .sun .org .apache .bcel .internal .generic .CodeExceptionGen com .sun .org .apache .bcel .internal .generic .ExceptionThrower com .sun .org .apache .bcel .internal .generic .TargetLostException com .sun .org .apache .regexp .internal .RESyntaxException com .sun .org .apache .xalan .internal .xsltc .TransletException com .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .GetOptsException com .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .IllegalArgumentException com .sun .org .apache .xalan .internal .xsltc .cmdline .getopt .MissingOptArgException com .sun .org .apache .xalan .internal .xsltc .compiler .CompilerException com .sun .org .apache .xalan .internal .xsltc .compiler .IllegalCharException com .sun .org .apache .xerces .internal .dom .RangeExceptionImpl com .sun .org .apache .xerces .internal .impl .dv .DatatypeException com .sun .org .apache .xerces .internal .impl .dv .DVFactoryException com .sun .org .apache .xerces .internal .impl .dv .InvalidDatatypeFacetException

com .sun .org .apache .xerces .internal .impl .dv .InvalidDatatypeValueException com .sun .org .apache .xerces .internal .impl .dv .xs .SchemaDateTimeException com .sun .org .apache .xerces .internal .impl .io .MalformedByteSequenceException com .sun .org .apache .xerces .internal .impl .xpath .XPathException com .sun .org .apache .xerces .internal .impl .xpath .regex .ParseException com .sun .org .apache .xerces .internal .impl .xs .XMLSchemaException com .sun .org .apache .xerces .internal .jaxp .validation .WrappedSAXException com .sun .org .apache .xerces .internal .xni .XNIException com .sun .org .apache .xerces .internal .xni .parser .XMLConfigurationException com .sun .org .apache .xerces .internal .xni .parser .XMLParseException com .sun .org .apache .xerces .internal .xs .XSException com .sun .org .apache .xml .internal .dtm .DTMConfigurationException com .sun .org .apache .xml .internal .dtm .DTMDOMException com .sun .org .apache .xml .internal .dtm .DTMException com .sun .org .apache .xml .internal .resolver .CatalogException com .sun .org .apache .xml .internal .security .exceptions com .sun .org .apache .xml .internal .security .c14n .CanonicalizationException com .sun .org .apache .xml .internal .security .c14n .InvalidCanonicalizerException com .sun .org .apache .xml .internal .security .encryption .XMLEncryptionException com .sun .org .apache .xml .internal .security .exceptions .AlgorithmAlreadyRegisteredException com .sun .org .apache .xml .internal .security .exceptions .Base64DecodingException com .sun .org .apache .xml .internal .security .exceptions .XMLSecurityException com .sun .org .apache .xml .internal .security .exceptions .XMLSecurityRuntimeException com .sun .org .apache .xml .internal .security .keys .ContentHandlerAlreadyRegisteredExceptio com .sun .org .apache .xml .internal .security .keys .keyresolver .InvalidKeyResolverException com .sun .org .apache .xml .internal .security .keys .keyresolver .KeyResolverException com .sun .org .apache .xml .internal .security .keys .storage .StorageResolverException com .sun .org .apache .xml .internal .security .signature .InvalidDigestValueException com .sun .org .apache .xml .internal .security .signature .InvalidSignatureValueException com .sun .org .apache .xml .internal .security .signature .MissingResourceFailureException com .sun .org .apache .xml .internal .security .signature .ReferenceNotInitializedException com .sun .org .apache .xml .internal .security .signature .XMLSignatureException com .sun .org .apache .xml .internal .security .transforms .InvalidTransformException com .sun .org .apache .xml .internal .security .transforms .TransformationException com .sun .org .apache .xml .internal .security .utils .resolver .ResourceResolverException com .sun .org .apache .xml .internal .serializer .utils .WrappedRuntimeException com .sun .org .apache .xml .internal .utils .StopParseException com .sun .org .apache .xml .internal .utils .WrappedRuntimeException com .sun .org .apache .xml .internal .utils .WrongParserException com .sun .org .apache .xpath .internal .XPathException com .sun .org .apache .xpath .internal .XPathProcessorException com .sun .org .apache .xpath .internal .domapi .XPathStylesheetDOM3Exception com .sun .org .apache .xpath .internal .functions .WrongNumberArgsException java .awt .AWTException

java .awt .FontFormatException java .awt .HeadlessException java .awt .IllegalComponentStateException java .awt .color .CMMException java .awt .color .ProfileDataException java .awt .datatransfer .MimeTypeParseException java .awt .datatransfer .UnsupportedFlavorException java .awt .dnd .InvalidDnDOperationException java .awt .geom .IllegalPathStateException java .awt .geom .NoninvertibleTransformException java .awt .image .ImagingOpException java .awt .image .RasterFormatException java .awt .print .PrinterAbortException java .awt .print .PrinterException java .awt .print .PrinterIOException java .beans .ExceptionListener java .beans .IntrospectionException java .beans .PropertyVetoException java .io .CharConversionException java .io .EOFException java .io .FileNotFoundException java .io .InterruptedIOException java .io .InvalidClassException java .io .InvalidObjectException java .io .IOException java .io .NotActiveException java .io .NotSerializableException java .io .ObjectStreamException java .io .OptionalDataException java .io .StreamCorruptedException java .io .SyncFailedException java .io .UnsupportedEncodingException java .io .UTFDataFormatException java .io .WriteAbortedException java .lang .ArithmeticException java .lang .ArrayIndexOutOfBoundsException java .lang .ArrayStoreException java .lang .ClassCastException java .lang .ClassNotFoundException java .lang .CloneNotSupportedException java .lang .EnumConstantNotPresentException java .lang .Exception java .lang .ExceptionInInitializerError java .lang .IllegalAccessException java .lang .IllegalArgumentException java .lang .IllegalMonitorStateException java .lang .IllegalStateException

java .lang .IllegalThreadStateException java .lang .IndexOutOfBoundsException java .lang .InstantiationException java .lang .InterruptedException java .lang .NegativeArraySizeException java .lang .NoSuchFieldException java .lang .NoSuchMethodException java .lang .NullPointerException java .lang .NumberFormatException java .lang .RuntimeException java .lang .SecurityException java .lang .StringIndexOutOfBoundsException java .lang .TypeNotPresentException java .lang .UnsupportedOperationException java .lang .annotation .AnnotationTypeMismatchException java .lang .annotation .IncompleteAnnotationException java .lang .instrument .IllegalClassFormatException java .lang .instrument .UnmodifiableClassException java .lang .reflect .InvocationTargetException java .lang .reflect .MalformedParameterizedTypeException java .lang .reflect .UndeclaredThrowableException java .net .BindException java .net .ConnectException java .net .HttpRetryException java .net .MalformedURLException java .net .NoRouteToHostException java .net .PortUnreachableException java .net .ProtocolException java .net .SocketException java .net .SocketTimeoutException java .net .UnknownHostException java .net .UnknownServiceException java .net .URISyntaxException java .nio .BufferOverflowException java .nio .BufferUnderf

You might also like