2010-02-21 17 views
7

estoy corriendo el siguiente código en Eclipse, pero conseguir una clase que no se encuentra una excepción:clase Conseguir No se ha encontrado excepción cuando se ejecuta en Eclipse

  import org.eclipse.jface.window.Window; 
     import org.eclipse.swt.SWT; 
     import org.eclipse.swt.widgets.Display; 
     import org.eclipse.swt.widgets.Shell; 



     public class DialogClass { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    System.out.println("TEst"); 
    Shell frame = new Shell(SWT.SHELL_TRIM); 

    PublishGenericArtefactDialog publishGenericArtefactDialog =    
         new PublishGenericArtefactDialog(frame); 

    publishGenericArtefactDialog.setTitle("Test"); 

    if (publishGenericArtefactDialog.open() == Window.CANCEL){ 
     try { 
      throw new Exception("Cancelled"); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
     } 

     } 

y error que estoy recibiendo es

TEst 
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IStatus 
at DialogClass.main(DialogClass.java:19) 
    Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IStatus 
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.ClassLoader.loadClassInternal(Unknown Source) 
... 1 more 

ayuda de la necesidad

Respuesta

10

Como se mencionó en this thread

¿Ha enumerado la org.eclipse.core.runtime como una dependencia plug-in en el Manfest.MF?
Creo que el IStatus se encuentra realmente en un paquete Equinox, pero el tiempo de ejecución incluye el complemento Equinox en tiempo de ejecución.
Si solo lo está ejecutando como una aplicación Java (por ejemplo, pegando tarros en el classpath) entonces probablemente necesite el org.eclipse.equinox.core/runtime o similar.

Gracias por su sugerencia. El problema se resolvió agregando org.eclipse.equinox.common y org.eclipse.core.commands a la propiedad Java Build Path para el proyecto, que ejecuto como una aplicación SWT.

Como se ha mencionado por AlBlue en el comentario, la Eclipse wiki on JFace confirma:

JFace se puede utilizar en aplicaciones SWT + JFace independientes, sin requerir que el tiempo de ejecución de Eclipse o otras partes de la plataforma Eclipse.
Esto se hizo más fácil de hacer en 3.2 (2006), con los únicos requisitos previos para JFace se reduce a:

  • SWT,
  • la nueva org.eclipse.equinox.common plug-in,
  • y org.eclipse.core.commands plug-in.

Para obtener más información, consulte Bug 49497.

En 3.3 una dependencia opcional en el org.osgi.framework se agregó el paquete que se define en el org.eclipse.osgi.
Si este complemento está ausente, JFace continuará funcionando pero sin el beneficio del soporte de internacionalización para sus imágenes.

+0

Sí, la la documentación de JFace sugiere que deben agregarse. http://wiki.eclipse.org/index.php/JFace#Using_JFace_outside_the_Eclipse_platform – AlBlue

-1

¿Ha importado algo para esto?

PublishGenericArtefactDialog publishGenericArtefactDialog =    
         new PublishGenericArtefactDialog(frame); 
+0

que está en el mismo paquete – GuruKulki

2

El classpath para compilar no es necesariamente el mismo que el classpath en tiempo de ejecución. Hay una configuración de ejecución (Ejecutar-> Ejecutar ...) que te dará acceso a lo que está allí.

Tenga en cuenta que el jar SWT es solo las clases de API; necesitará un binario per-os para las clases de tiempo de ejecución reales, por lo que podría faltar. Si agrega el contenedor de ruta de clases "swt", debería hacer lo correcto.

¿Cuál es el contenido del proyecto actual de .classpath inbyout?

+0

tengo JFace-3.0.1.jar y Eclipse-JFace-2.1.0.jar, pero el primero es tener ComboViewer que se necesita para mí, pero con el primer jar obteniendo este error, pero con el segundo funciona bien. – GuruKulki

+0

JFace necesita SWT. Sospecho que tu eclipse-jface-2.1.0.jar puede tener un SWT incrustado (si eso es todo lo que tienes). Tenga en cuenta que JFace 2.1 puede necesitar una versión más baja de SWT que JFace 3.0. (Además, no está claro donde está recibiendo estos de) Aquí es cómo utilizar JFace fuera de un tiempo de ejecución de Eclipse: http://wiki.eclipse.org/index.php/JFace#Using_JFace_outside_the_Eclipse_platform – AlBlue

0

Cuando se ejecuta el producto exportado, si ves algo como,

org.osgi.framework.BundleException: 
The activator org.eclipse.ui.internal.WorkbenchPlugin 
for bundle org.eclipse.ui.workbench is invalid 

... 

Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.SWTError 

Se podrá fijar a través de:

  1. Abrir el editor de configuración del producto en su archivo de producto
  2. Haga clic en la pestaña "Lanzar"
  3. , borre los campos "Argumentos del programa" y "Argumentos VM".
  4. Re-exportar el producto
Cuestiones relacionadas