我有一个在Eclipse中完美运行的大应用程序,我为我的应用程序创建了一个可执行jar文件,我的应用程序使用 jython 来定义一些资源。我还创建了以下.bat文件来运行文件:
@ echo off
java -Xms64m -Xmx512m -Xincgc -Dpython.home=jython-2.1 -Dpython.path=jython-2.1/Lib/alice -Djava.library.path=lib/win32;externalLib/win32; -jar MyProg23.jar
执行.bat文件时会出现异常,这是此异常的一部分:
java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at edu.cmu.cs.stage3.alice.authoringtool.JAlice.main(JAlice.java:163)
Caused by: Traceback (innermost last):
File "C:\MyWork\AliceDev\Alice test\resources\Alice Style.py", line 23, in ?
File "C:\MyWork\AliceDev\Alice test\resources\common\StandardResources.py", li
ne 181, in ?
AttributeError: java package 'javax' has no attribute 'vecmath'
at org.python.core.Py.AttributeError(Py.java)
at org.python.core.PyObject.__getattr__(PyObject.java)
at org.python.pycode._pyx1.f$0(C:\MyWork\AliceDev\Alice test\resources\c
ommon\StandardResources.py:181)
at org.python.pycode._pyx1.call_function(C:\MyWork\AliceDev\Alice test\r
esources\common\StandardResources.py)
at org.python.core.PyTableCode.call(PyTableCode.java)
at org.python.core.PyCode.call(PyCode.java)
at org.python.core.Py.runCode(Py.java)
at org.python.core.__builtin__.execfile_flags(__builtin__.java)
at org.python.core.__builtin__.execfile(__builtin__.java)
at org.python.core.__builtin__.execfile(__builtin__.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java
)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java
)
at org.python.core.PyObject.__call__(PyObject.java)
at org.python.pycode._pyx0.f$0(C:\MyWork\AliceDev\Alice test\resources\A
lice Style.py:23)
at org.python.pycode._pyx0.call_function(C:\MyWork\AliceDev\Alice test\r
esources\Alice Style.py)
at org.python.core.PyTableCode.call(PyTableCode.java)
at org.python.core.PyCode.call(PyCode.java)
at org.python.core.Py.runCode(Py.java)
at org.python.core.__builtin__.execfile_flags(__builtin__.java)
at org.python.core.__builtin__.execfile(__builtin__.java)
at edu.cmu.cs.stage3.alice.authoringtool.AuthoringToolResources.loadReso
urcesPy(AuthoringToolResources.java:199)
at edu.cmu.cs.stage3.alice.authoringtool.AuthoringToolResources.<clinit>
(AuthoringToolResources.java:108)
... 3 more
vecmath.jar 文件和其他外部库建立在名为externalLib的文件夹中,该文件夹位于 Myprog23.jar 和 .bat <的相同文件夹中/ em>文件
如何解决问题以及需要设置什么?
答案 0 :(得分:0)
您需要将程序中使用的所有jar添加到classpath。因此,在您的情况下,应该在classpath中添加externalLib目录中存在的所有jar。
要在类路径中添加jar,您可以参考Setting multiple jars in java classpath
答案 1 :(得分:0)
我假设您已正确设置CLASSPATH变量。假设您已正确安装JyThon。您应该确保确保 TEST JyThon hello world 您的应用程序环境的外部。您需要一步一步地执行此操作,Alice是一个复杂的系统,因此很难在不确保库的基本结构到位的情况下调试您的问题。
根据这些假设,您可以继续使用JyThon文档FAQ:
Jython找不到你的Java类,即使它存在于类中 路径。这显示为&#34; ImportError:无法导入名称xxx&#34;要么 &#34; AttributeError:java包xxx&#39;没有属性&#39; yyy&#39;&#34; 当Jython作为Java扩展安装时(即何时) jython.jar安装在java \ jre \ lib \ ext中,你的类是 安装在类路径中。
原因是Java扩展只能看到其他扩展,而不能看到其他扩展 在CLASSPATH中定义的类或使用的传递给java的类 --classpath选项。
有两种方法可以解决此问题:
将您的类移动到java \ jre \ lib \ ext目录。
从java \ jre \ lib \ ext目录中删除jython.jar并放入 CLASSPATH中的jython.jar或使用java --classpath选项。