2012-05-28 74 views
0

我有一个Eclipse应用程序,为此我创建了用于生成jnlp文件的功能。 我使用maven tycho为x86架构和x86_64架构构建了应用程序。使用java web start启动Eclipse应用程序会生成java.lang.ClassNotFoundException:org.eclipse.swt.SWTError

当我尝试启动应用程序的jnlp时,发现所有资源都已下载,但应用程序无法启动。如果我试图用大衣把它打开,它就会开始。我查了日志第一种情况下,我得到了以下几点:

eclipse.buildId=unknown 
java.version=1.6.0_26 
java.vendor=Sun Microsystems Inc. 
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US 
Framework arguments: -clientno=01 -StartupLogo=false -mode=3 -sessionid=7110AAD90803F34A9B01CD66A676E0ED.ASES01 -ServletDir=/SES/ -Port=8080 -host=172.20.224.138 -auth=tftttttttttt -Lang=de_DE -user=taris -Protocol=http 
Command-line arguments: -clientno=01 -StartupLogo=false -mode=3 -sessionid=7110AAD90803F34A9B01CD66A676E0ED.ASES01 -ServletDir=/SES/ -Port=8080 -host=172.20.224.138 -auth=tftttttttttt -Lang=de_DE -user=taris -Protocol=http 

!ENTRY org.eclipse.osgi 4 0 2012-05-28 15:56:46.999 
!MESSAGE An error occurred while automatically activating bundle org.eclipse.ui.workbench (20). 
!STACK 0 
org.osgi.framework.BundleException: The activator org.eclipse.ui.internal.WorkbenchPlugin for bundle org.eclipse.ui.workbench is invalid 
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:171) 
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:679) 
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) 
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) 
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:463) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) 
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(Unknown Source) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass 
[....] 

Caused by: java.lang.NoClassDefFoundError: org/eclipse/swt/SWTError 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) 
    at java.lang.Class.getConstructor0(Unknown Source) 
    at java.lang.Class.newInstance0(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:166) 
    ... 78 more 
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.SWTError 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 84 more 

这里是POM的一部分用于生成资源:

<plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>target-platform-configuration</artifactId> 
      <version>${tycho-version}</version> 
      <configuration> 
       <resolver>p2</resolver> 
            <ignoreTychoRepositories>true</ignoreTychoRepositories> 
       <environments> 
        <environment> 
         <os>win32</os> 
         <ws>win32</ws> 
         <arch>x86</arch> 
        </environment> 
        <environment> 
         <os>win32</os> 
         <ws>win32</ws> 
         <arch>x86_64</arch> 
        </environment> 
       </environments> 
      </configuration> 
     </plugin> 

我没有检查资源的引用JNLP文件:

<resources os="Windows" arch="x86"> 
<jar href="plugins/org.eclipse.swt.win32.win32.x86_3.7.2.v3740f.jar"/> 

我也检查了缓存并下载了资源。

我只是无法找到一个不以Java web start开头的应用程序的原因,当在浏览器中直接启动它时没有问题。

任何帮助表示赞赏!

+0

日志中的错误消息,说不同的东西:'活化剂org.eclipse.ui.internal.WorkbenchPlugin用于捆绑org.eclipse.ui.workbench是invalid'在哪里你是否得到SWT错误? –

+0

请务必使用[JaNeLA](http://pscode.org/janela/)检查JNLP。 –

回答

0

我的应用程序出现同样的错误。该项目是使用buckminster构建的,但也适用于x86和x86_64。

您的应用程序确实通过浏览器启动,因为这是一个32位应用程序,它会将您的webstart作为32位应用程序调用。

通过Windows资源管理器启动您的应用程序,将启动一个64位应用程序,这会遇到麻烦。

这里是为我工作的解决方案:
编辑包含功能的JNLP文件:
修改(原单JNLP文件,它不工作)

... 
</resources> 
<resources os="Windows" arch="x86"> 
    <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.7.0.v3735b.jar"/> 
    <jar href="plugins/org.eclipse.core.filesystem.win32.x86_1.1.300.v20110423-0524.jar"/> 
    <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502.jar"/> 
</resources> 
<resources os="Windows" arch="x86_64"> 
    <jar href="plugins/org.eclipse.core.filesystem.win32.x86_64_1.1.300.v20110423-0524.jar"/> 
    <jar href="plugins/org.eclipse.swt.win32.win32.x86_64_3.7.0.v3735b.jar"/> 
    <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502.jar"/> 
</resources> 

到(新jnlp文件,这应该工作)

... 
<resources os="Windows" arch="x86"> 
    <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.7.0.v3735b.jar"/> 
    <jar href="plugins/org.eclipse.core.filesystem.win32.x86_1.1.300.v20110423-0524.jar"/> 
    <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502.jar"/> 
<resources os="Windows"> 
    <jar href="plugins/org.eclipse.core.filesystem.win32.x86_64_1.1.300.v20110423-0524.jar"/> 
    <jar href="plugins/org.eclipse.swt.win32.win32.x86_64_3.7.0.v3735b.jar"/> 
    <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502.jar"/> 
</resources> 

换句话说:删除arch =“x86_64”过滤器。

我认为这是一个春分发射器的错误。但它的真正原因对我来说是一个秘密。

P.S:仅为org.eclipse.swt.win32.win32.x86_64捆绑软件删除arch-filter也可以。
PPS:我发现了一个类似的问题在这里:http://www.eclipse.org/forums/index.php/t/314656/

相关问题