找不到类在eclipse中运行时出现异常

时间:2010-02-21 14:16:42

标签: java eclipse

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

       }

我得到的错误是

    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

需要帮助

4 个答案:

答案 0 :(得分:10)

正如this thread

中所述
  
    

您是否已将org.eclipse.core.runtime列为Manfest.MF中的插件依赖项?     我认为IStatus实际上是在Equinox包中,但运行时在运行时包含了equinox插件。
    如果您只是将其作为Java应用程序运行(例如,通过在类路径上粘贴Jars),那么您可能需要org.eclipse.equinox.core/runtime或类似的。

  
     

感谢您的建议。通过将 org.eclipse.equinox.common org.eclipse.core.commands添加到项目的Java Build Path属性(我作为SWT应用程序运行)来解决该问题。

正如评论中AlBlue所述,Eclipse wiki on JFace确认:

  

JFace可以在独立的SWT + JFace应用程序中使用,无需Eclipse Runtime或Eclipse Platform的其他部分。
  这在3.2(2006)中变得更容易,JFace的唯一先决条件被简化为:

     
      
  • SWT
  •   
  • 新的 org.eclipse.equinox.common 插件,
  •   
  • org.eclipse.core.commands 插件。
  •   
     

有关详细信息,请参阅Bug 49497

     

在3.3中添加了对{strong> org.osgi.framework 包的可选依赖项,该附件在org.eclipse.osgi中定义。
  如果没有这个插件,JFace将继续运行,但没有图像的国际化支持。

答案 1 :(得分:2)

用于编译的类路径不一定与运行时类路径相同。有一个启动配置(运行 - >运行...)将为你提供什么。

请注意,SWT jar只是API类 - 您需要一个用于实际运行时类的per-os二进制文件,因此可能会丢失。如果你添加“swt”类路径容器,那么它应该做正确的事情。

.classpath inbyout当前项目的内容是什么?

答案 2 :(得分:0)

当您运行导出的产品时,如果您看到类似的内容,

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

可以通过以下方式修复:

  1. 打开产品文件上的产品配置编辑器
  2. 点击“启动”标签
  3. 清除“Program Arguments”和“VM Arguments”字段。
  4. 重新导出产品

答案 3 :(得分:-1)

你为此导入了什么东西吗?

PublishGenericArtefactDialog publishGenericArtefactDialog =            
                       new PublishGenericArtefactDialog(frame);