我在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
需要帮助
答案 0 :(得分:10)
您是否已将
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
可以通过以下方式修复:
答案 3 :(得分:-1)
你为此导入了什么东西吗?
PublishGenericArtefactDialog publishGenericArtefactDialog =
new PublishGenericArtefactDialog(frame);