Java 带有lwjgl的类路径jdb

Java 带有lwjgl的类路径jdb,java,lwjgl,jdb,Java,Lwjgl,Jdb,你好 我正在用vim和lwjgl编写一个游戏,我正在尝试用jdb调试,但我遇到了一些问题 首先,我向您展示我的项目树。(主类是Engine.java) 我正在使用javac调试选项用ant编译我的项目。以下是build.xml文件中的编译部分: <!-- Compile --> <target name="compile"> <mkdir dir="${classes.dir}" /> <javac srcdir="${src.dir}

你好

我正在用vim和lwjgl编写一个游戏,我正在尝试用jdb调试,但我遇到了一些问题

首先,我向您展示我的项目树。(主类是Engine.java)

我正在使用javac调试选项用ant编译我的项目。以下是build.xml文件中的编译部分:

<!-- Compile -->
<target name="compile">
    <mkdir dir="${classes.dir}" /> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" debug="true" includeantruntime="false" />
</target>   
我也注意到了这个奇怪的例外

Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
我找到了这篇解释解决方案的帖子

ignore uncaught java.lang.Throwable
我不确定我需要把这行代码放在哪里才能解决这个问题。 我还需要包括lwjgl的.class?我不知道我做错了什么

更新:

我将lwjgl包含在我的类路径中,它现在仍然运行良好。我还包括了源文件的路径

ruby@Cedrus ~/development/java/projects/Jump2Box $ jdb -launch -classpath build/classes/com/ionsoft/engine/:build/classes/com/ionsoft/game/:lib/jars/ -sourcepath src/com/ionsoft/engine/:src/com/ionsoft/game/ Engine
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> 
VM Started: No frames on the current call stack

main[1] stop in Engine.main
Deferring breakpoint Engine.main.
It will be set after the class is loaded.
main[1] cont
> 
Exception occurred: java.lang.NoClassDefFoundError (uncaught)"thread=main",java.lang.ClassLoader.loadClass(), line=436 bci=121

main[1] next
Excep> tion in thread "main" java.lang.NoClassDefFoundError: Engine (wrong name: com/ionsoft/engine/Engine)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

The application exited
如果我尝试将JVM作为jdb的服务器运行,同样的错误也会出现

设置JVM服务器

ruby@Cedrus ~/development/java/projects/Jump2Box $ java -classpath build/classes/com/ionsoft/engine/:build/classes/com/ionsoft/game/:lib/jars/ -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,suspend=y Engine                                                                                     
Listening for transport dt_socket at address: 8888
与jdb连接

ruby@Cedrus ~/development/java/projects/Jump2Box $ jdb -sourcepath src/com/ionsoft/engine/:src/com/ionsoft/game/ -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8888
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> 
VM Started: No frames on the current call stack

main[1] stop in Engine.main
Deferring breakpoint Engine.main.
It will be set after the class is loaded.
main[1] cont
> 
Exception occurred: java.lang.NoClassDefFoundError (uncaught)"thread=main",java.lang.ClassLoader.loadClass(), line=436 bci=121

main[1] list
Source file not found: ClassLoader.java
main[1] next
> 
The application exited
当出现“异常”时,JVM会显示相同的错误

Exception in thread "main" java.lang.NoClassDefFoundError: Engine (wrong name: com/ionsoft/engine/Engine)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
我知道名字有问题,但我不知道如何解决

当我使用lwjgl运行jar文件时,我需要将本机文件附加到jar。我使用ant执行此操作。这里是我做这个操作的目标

<!-- Run generated jar -->
<target name="run" depends="jar">
    <java fork="true" classname="${main-class}">
     <classpath>
         <path refid="classpath" />
         <path location="${jar.dir}/${ant.project.name}.jar" />
     </classpath>
     <sysproperty key="java.library.path" value="${lwjgl_natives.dir}" />  </java>
</target>    


谢谢您的时间。

您需要在类路径中包含lwjgl jar


或者——这可能更容易——您可以使用jdb连接到另一个JVM,然后我认为这些类将通过网络或其他方式传输。或者可能它们只是不需要。

要解决这个问题,我需要做三件事

  • 在类路径中指定lwjgl.jar的路径
  • 添加-Djava.library.path选项以插入lwjgl本机
  • 同时使用包使用类的全名。例如:com.ionsoft.engine.engine
  • 在这里,我添加了用于JVM服务器和JDB客户端的工作命令:

    # JVM server
    java -classpath ./build/classes:./lib/jars/lwjgl.jar -Djava.library.path=./lib/natives-linux -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,suspend=y com.ionsoft.engine.Engine
    
    # JDB client
    jdb -sourcepath ./src -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8888
    

    希望这对某人有所帮助。

    它工作不好。我想我做错了什么。我在静默中附上了更多信息作为答案。我按照您的建议在类路径中添加了lwjgl.jar,没有任何更改。如果您需要更多信息,只需询问,“那么我认为课程将通过网络或其他方式传输”——这不会发生。
    <!-- Run generated jar -->
    <target name="run" depends="jar">
        <java fork="true" classname="${main-class}">
         <classpath>
             <path refid="classpath" />
             <path location="${jar.dir}/${ant.project.name}.jar" />
         </classpath>
         <sysproperty key="java.library.path" value="${lwjgl_natives.dir}" />  </java>
    </target>    
    
    # JVM server
    java -classpath ./build/classes:./lib/jars/lwjgl.jar -Djava.library.path=./lib/natives-linux -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,suspend=y com.ionsoft.engine.Engine
    
    # JDB client
    jdb -sourcepath ./src -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8888