Pregunta

acabo de refactorizado un proyecto en Eclipse para usar en lugar de paquetes el paquete por defecto para organizar mejor mi código. Tengo un programa de prueba que crea una serie de objetos ejecutable, cada uno de los cuales se ejecutan secuencialmente el uno al otro, pero en paralelo con el programa principal.

Antes de esta refactorización funcionaba bien, con cada hilo de realizar debidamente su tarea. Sin embargo, desde que se mudaron cosas en paquetes que estoy recibiendo una excepción ClassNotFound tan pronto como uno de los intentos clases Ejecutable para utilizar una clase de otro paquete. StackTrace sigue:

java.lang.ClassNotFoundException: Tweet
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at indexing.TweetCleanup.run(TweetCleanup.java:84)
at java.lang.Thread.run(Unknown Source)

En esta traza 'TweetCleanup' es la clase Ejecutable, y 'Tweet' es la clase que no se encuentra. He incluido en TweetCleanup como 'common.Tweet' (donde es común el paquete). He utilizado un programa de prueba separado para ver si se puede ver la clase en el hilo principal, que se ejecuta correctamente.

Lo único que ocurre es que las necesidades de rosca que se deben proporcionar alguna ruta de clase de 'ver' la clase Tweet, sin embargo, este no era el caso antes de la refactorización como paquetes. Creo que el comportamiento predeterminado de un hilo hijo es utilizar la ruta de clases de su padre, que incluye 'common.Tweet'.

Estoy usando Eclipse Helios como mi IDE.

Cualquier consejo sería apreciado!

Saludos,

P

¿Fue útil?

Solución

No es un problema que rosca en absoluto, sino que está utilizando Java La serialización de alguna manera y que trate de leer un objeto de un arroyo que tiene "mayor" objetos almacenados en su interior.

sospecho que está utilizando algún tipo de persistencia de Java La serialización y su TweetCleanup-Thread está leyendo en la antigua "base de datos". Eliminar este archivo y su programa va a funcionar de nuevo.

Tenga en cuenta que cambiar el nombre de los paquetes o clases de movimiento es un cambio incompatible binario -. No se puede deserializar dichos objetos más

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top