2011-03-03 10 views
6

Tengo un paquete, con un activador declarado. Este activador crea un JFrame y lo muestra.java.lang.NoClassDefFoundError en OSGi

Al ejecutar en Eclipse como proyecto de complemento, funciona bien. Cuando me pongo con Félix, ya no funciona. Muestra: java.lang.NoClassDefFoundError: com/griep/ui/Unidad central

Pero Unidad central se encuentra en el mismo paquete que el activador es, como una clase pública, por supuesto. No entiendo por qué el cargador de clases no encuentra la clase.

¿Alguien sabe lo que está pasando?

+0

hay una envuelta ¿excepción? –

+0

Parece no = [... –

Respuesta

6

Asegúrese de importar el paquete de javax.swing en su conjunto:

Import-Package: javax.swing 
+0

@Neil no, esto es incorrecto, el OPhas es el perfil de osgi establecido en Bundle-RequiredExecutionEnvironment: J2SE-1.5, lo que significa que los paquetes javax. * Deben exportarse automáticamente por system.bundle –

+3

@Suraj Lamento tener que estar en desacuerdo públicamente, pero solo porque el paquete javax.swing es exportado por el paquete del sistema no significa que se importe automáticamente por cada paquete. La regla en OSGi es que debe importar los paquetes que usa, con la única excepción de "java. *". –

+0

@Neil @Neil Incluso lo has probado antes de escribir tal cosa. Puedo usar el paquete javax.swing sin importarlo. ¿Conoce el concepto de "Bundle-RequiredExecutionEnvironment" y el concepto de perfiles? Por lo menos escriba un código y revise usted mismo antes de engañar a los demás. –

0

Se ha declarado en el Bundle-ClassPath en MANIFIEST.MF de su paquete

+0

No ... Pero como he dicho, el MainFrame está ubicado en el mismo paquete que el activador es –

+0

, debe mencionar Bundle-ClassPath. aunque por defecto puede recoger "." pero igual o estar seguro ... –

+0

hmmmm me encontré con un excpetion anidada en los registros ... causada por: java.lang.ClassNotFoundException: javax.swing.JFrame ¿Por qué necesito para declarar? JFrame está en la biblioteca predeterminada de Java. –

1

ahora funciona! ¡Configuré la delegación de arranque en el archivo de configuración!

Pongo org.osgi.framework.bootdelegation = en config.ini.

Ambos deberían decirme esto antes chicos, jeje. Ahora leo en equinox wiki, que siguiendo la especificación OSGi necesito definir cada paquete que necesito usar, y creo que es correcto, porque algunas VM personalizadas pueden tener más libs que otras.

Pero Eclipse no funciona en este concepto de importar cada paquete de Java (como javax.swing). Informaré esto en Eclipse Bugzilla.

Muchas gracias a ustedes dos!

PD: ¿Cuál es su libro @Neil?

+0

Lo he informado https://bugs.eclipse.org/bugs/show_bug.cgi?id=338924 –

2

utilizar este argumento VM:

-Djava.specification.version=1.6

Esto obligará a Felix poner a disposición el conjunto predeterminado de paquetes del sistema para Java 6, que incluye javax.swing y sus sub-paquetes

+0

Utilicé ese tiempo, pero no fue suficiente. Gracias –

Cuestiones relacionadas