簡體   English   中英

在Java中使用外部庫

[英]Using external libraries in Java

這是我在運行時不斷遇到的錯誤:

[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException

注意,這是一個運行時錯誤,而不是編譯錯誤。 我的build.xml中的兩個任務都有相同的類路徑集,並且編譯任務每次運行都很好:

<path id="classpath">
    <fileset dir="lib" includes="*.jar" />
</path>

<target name="compile">
    <mkdir dir="build/classes"/>
    <javac
        srcdir="src"
        classpathref="classpath"
        includeantruntime="false"
        destdir="build/classes"
    />
</target>
...
<target name="run" depends="clean,compile,jar">
    <java
        jar="build/jar/${project.name}.jar"
        fork="true"
        classpathref="classpath"
        >
        <sysproperty key="java.library.path" path="${path.lib}/windows"/>
    </java>
</target>

嘗試通過命令行手動運行jar會得到相同的結果:

java -cp .:lib/*.jar -Djava.library.path=lib/windows -jar build/jar/JUtopia.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException

請注意,庫jarfile可以:

bash-3.1$ jar -tf lib/lwjgl.jar | grep LWJGLException
org/lwjgl/LWJGLException.class

並且本地庫已經到位:

bash-3.1$ ls lib/windows/lwjgl.dll
lib/windows/lwjgl.dll

問題是:我哪里錯了? 我在這個問題上打了將近3天。 任何幫助將非常感激。

全部結果堆棧:

clean:
   [delete] Deleting directory C:\Users\mkumpan\Projects\JUtopia\build

compile:
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\classes
    [javac] Compiling 12 source files to C:\Users\mkumpan\Projects\JUtopia\build\classes

jar:
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\jar
      [jar] Building jar: C:\Users\mkumpan\Projects\JUtopia\build\jar\JUtopia.jar

run:
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException
     [java]     at JUtopia.<init>(Unknown Source)
     [java]     at JUtopia.main(Unknown Source)
     [java] Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     [java]     ... 2 more

PS:請注意,我在Windows環境中將Console2與bash一起使用以進行命令行工作,因此Windows本機用戶使用Linux Shell語法。 使用香草cmd運行罐子會得到相同的結果。

-jar...

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored. - 參考

嘗試在JAR中設置類路徑

或者,通過在命令行上指定主類,嘗試不使用-Jar選項運行

可能的原因之一是,在加載類LWJGLException時,它還引用了在類路徑上找不到的另一個類。 因此,報告的錯誤有時不清楚。

這里重要的是,您有這個NoClassDefFoundError而不是ClassNotFoundException,這是您假設遇到的錯誤:它找不到類LWHLException,可以! 但是它無法加載...。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM