2010-02-21 12 views
7

sto facendo funzionare il seguente codice in Eclipse, ma ottenere una classe non trovata eccezione:Ottenere classe non trovata eccezione durante l'esecuzione in eclisse

  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(); 
     } 
     } 
     } 

     } 

ed errore sto ottenendo è

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 

bisogno di aiuto

risposta

10

Come accennato in this thread

Avete elencato il org.eclipse.core.runtime come una dipendenza plugin nella Manfest.MF?
Penso che lo IStatus sia effettivamente in un pacchetto Equinox, ma il runtime include il plugin equinox in fase di runtime.
Se si esegue semplicemente come applicazione Java (ad esempio attaccando i jar sul classpath), sarà probabilmente necessario il org.eclipse.equinox.core/runtime o simile.

Grazie per il suggerimento. Il problema è stato risolto aggiungendo org.eclipse.equinox.common e org.eclipse.core.commands alla proprietà Java Build Path per il progetto, che eseguo come applicazione SWT.

Come indicato dal AlBlue nel commento, il Eclipse wiki on JFace conferma:

JFace può essere utilizzato in applicazioni standalone SWT + JFace, senza richiedere l'runtime Eclipse o altre parti della piattaforma Eclipse.
Ciò è stato reso più facile da fare a 3.2 (2006), con gli unici prerequisiti per JFace essere ridotto a:

  • SWT,
  • il nuovo org.eclipse.equinox.common plug-in,
  • e org.eclipse.core.commands plug-in.

Per ulteriori dettagli, vedere Bug 49497.

In 3.3 è stata aggiunta una dipendenza opzionale per il pacchetto org.osgi.framework definito in org.eclipse.osgi.
Se questo plug-in è assente, JFace continuerà a funzionare ma senza il beneficio del supporto per l'internazionalizzazione per le sue immagini.

+0

Sì, il la documentazione per JFace suggerisce che è necessario aggiungerli. http://wiki.eclipse.org/index.php/JFace#Using_JFace_outside_the_Eclipse_platform – AlBlue

-1

Hai importato qualcosa per questo?

PublishGenericArtefactDialog publishGenericArtefactDialog =    
         new PublishGenericArtefactDialog(frame); 
+0

è nello stesso pacchetto – GuruKulki

2

Il percorso di classe per la compilazione non è necessariamente lo stesso del percorso di classe di runtime. C'è una config di lancio (Esegui-> Esegui ...) che ti farà scoprire cosa c'è.

Si noti che il vaso SWT è solo le classi API: è necessario un binario per-os per le classi di runtime reali, in modo che manchi. Se aggiungi il contenitore del percorso di classe "swt", dovrebbe fare la cosa giusta.

Qual è il contenuto di .classpath nel progetto corrente?

+0

ho JFace-3.0.1.jar ed Eclipse-JFace-2.1.0.jar, ma il primo è avere ComboViewer che è necessario per me, ma con il primo bar ricevo questo errore ma con il secondo funziona perfettamente. – GuruKulki

+0

JFace necessita di SWT. Sospetto che eclipse-jface-2.1.0.jar possa avere un SWT incorporato (se è tutto ciò che hai). Si noti che JFace 2.1 potrebbe richiedere una versione inferiore di SWT rispetto a JFace 3.0. (Inoltre, non è chiaro dove stai ricevendo questi da) Ecco come utilizzare JFace al di fuori di un runtime Eclipse: http://wiki.eclipse.org/index.php/JFace#Using_JFace_outside_the_Eclipse_platform – AlBlue

0

Quando si esegue il prodotto esportato, se si vede qualcosa di simile,

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 

Può essere fissato tramite:

  1. Aprire l'editor di configurazione del prodotto per il file prodotto
  2. Fare clic sulla scheda "Avvio"
  3. cancellare i campi "Argomenti del programma" e "Argomenti VM".
  4. Ri-esportare il prodotto
Problemi correlati