有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java代码生成和运行时执行,Java。lang.NoClassDefFoundError

我在大学里用Java做一个项目。当我们达到一个开发状态,希望在一个专用的基准网格(由uni提供)上运行一些基准时,我们遇到了一些问题

程序本身生成代码并在运行时执行(我们在初始化时预编译一些代码),这是需要的,因为我们进行了一些优化

现在,如果我们将代码提交到作业队列并通过“ant Main”运行它,则会发生以下错误:

 [java] Exception in thread "main" java.lang.NoClassDefFoundError: javax.tools.ToolProvider
 [java]    at propnet.PropNetComputations.compilePropnet(PropNetComputations.java:72)
 [java]    at propnet.PropNetStateMachine.initialize(PropNetStateMachine.java:145)
 [java]    at propnet.PropNetStateMachine.initialize(PropNetStateMachine.java:109)
 [java]    at statemachine.StateMachineGamer.metaGame(StateMachineGamer.java:177)
 [java]    at core.request.StartRequest.process(StartRequest.java:47)
 [java]    at core.GamePlayer.run(GamePlayer.java:82)
 [java]    at core.Main.main(Main.java:34)

编译似乎没有任何问题,但由于NoClassDefFoundError,执行似乎失败了。起初,我们认为这可能是一个版本问题,所以我们测试了各种Java版本(sun 1.6x、1.7x和openjdk 1.6x),但版本本身似乎没有问题

你知道怎么解决这个问题吗?提前感谢您提供的任何帮助


共 (3) 个答案

  1. # 1 楼答案

    有两种方法我会尝试解决这个问题,按照这个顺序

    1. 生成代码的VM是否与执行代码的VM相同?运行库说它试图运行该类,但当它查找该类时,却找不到该类。您可能缺少编译时使用的依赖项,但该依赖项不在执行代码的类路径中

    2. 这不太可能,但我遇到了这个问题。有时,类路径中可能有两个相同的依赖项。您可能还编译了与正在运行的代码具有不同依赖关系的代码。它们的名称可能相同,但可能是不同的版本。如果依赖项更改了类的内容,则这可能会导致类未找到错误。如果是这样的话,那么您就幸运了,因为通常很难跟踪由此产生的错误

    希望这有帮助

  2. # 2 楼答案

    NoClassDefFound仅仅意味着程序或库中存在依赖于类路径中不存在的类的类。如果您不直接从程序中引用这个类,编译就可以了

    在您的情况下,您可能缺少工具。jar在类路径中。加上它,一切都会好起来的

  3. # 3 楼答案

    您是否尝试过使用JDK而不是JRE来运行应用程序。据我所知,JRE不包含javax.tools.*类,但JDK包含。您还可以尝试手动将tools.jar添加到类路径