程序可以在我的电脑上运行,但不适用于服

时间:2012-07-25 18:36:16

标签: java database jar version main

我有一个程序我已经编写并变成了一个jar文件。 jar文件在我的计算机上运行正常。当我尝试在服务器上运行程序时,它将运行,jar文件不起作用。我收到这个错误。

    Exception in thread "main" java.lang.NoClassDefFoundError: Publish
Caused by: java.lang.ClassNotFoundException: Publish
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Publish. Program will exit.

我认为这个问题是由不同版本的java或不同的环境引起的。我认为这里的库不是问题,而是运行该程序的环境。 jar文件在我自己的计算机上完美运行。

我的java版本 java版“1.6.0_22” Java(TM)SE运行时环境(版本1.6.0_22-b04) Java HotSpot(TM)客户端VM(版本17.1-b03,混合模式,共享)

服务器java版 java版“1.6.0_24” Java(TM)SE运行时环境(版本1.6.0_24-b07) Java HotSpot(TM)64位服务器VM(版本19.1-b02,混合模式)

我也得到了这个错误,这表明我可能有一个32位的java,而服务器有64位,这可能会导致问题。

VM初始化期间发生错误 无法为对象堆保留足够的空间

通过分配一些内存来运行此过程,我轻松解决了这个错误。

有没有人知道如何解决这个问题?

注意:我也查看了清单文件,看起来很好

2 个答案:

答案 0 :(得分:2)

您正在使用Publish没有包裹。这意味着java期望这个类在默认包中。

您需要使用完全限定名称,例如:foo.bar.Publish

来自documentation

  

默认情况下,第一个非选项参数是类的名称   被调用。应使用完全限定的类名。如果-jar   选项被指定,第一个非选项争论是一个名称   包含应用程序的类和资源文件的JAR存档,   使用Main-Class清单标题指示的启动类。

答案 1 :(得分:1)

您需要包含完整的包名称。此错误不是32/64位操作系统的错误,也不是Java环境中的错误。