【问题标题】:Java: ClassNotFoundException on class from external jar being instantiated in a threadJava:在线程中实例化来自外部 jar 的类的 ClassNotFoundException
【发布时间】:2012-02-23 22:14:05
【问题描述】:

我创建了一个库并将其导出到一个 jar 文件中,我正在尝试将其导入到我的 eclipse 项目中并使用。 Eclipse 说没有问题,但是当我调试应用程序时,它会进入新线程并实例化对象,但随后会抛出 ClassNotFoundException

ClassNotFoundException(Throwable).(String, Throwable) 行:217 ClassNotFoundException(Exception).(String, Throwable) 行:不是 可用 ClassNotFoundException.(String) 行:不可用
URLClassLoader$1.run() 行:不可用
AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) 行:不可用 [本机方法] Launcher$ExtClassLoader(URLClassLoader).findClass(String) 行:不是 可用 Launcher$ExtClassLoader.findClass(String) 行:不 可用 Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) 行:不可用
Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) 行: 不可用 Launcher$AppClassLoader.loadClass(String, boolean) 线路:不可用
Launcher$AppClassLoader(ClassLoader).loadClass(String) 行:不是 可用 HKServiceListener.run() 行:33 Thread.run() 行:不 可用

它没有找到的类是com.snow.IO.SnowTcpServer。我已经在我的类路径中包含了外部 jar,并且没有编译错误。它只在运行时抛出。我什至在文件顶部有import com.snow.IO.SnowTcpServer,就像它应该的那样。

为什么它不能识别我的班级,我该如何让它识别?

【问题讨论】:

  • 你能提供你用来运行的命令吗?
  • 我从 Eclipse 运行它。我刚刚点击了 Run as Java Application 按钮

标签: java multithreading jar


【解决方案1】:

您的类路径有问题,没有其他原因导致类加载无法找到您的类的文件,请尝试使用命令行手动运行您的类(编译类)而不使用 eclipse

java -cp [your jars separated with ";" - widows or ":" - *nix] com.your.Class

例如:

java -cp /libs/lib1.jar:/libs2/* com.your.Class

【讨论】:

  • 当我尝试这个时,我得到Exception in thread "main" java.lang.NoClassDefFoundError: com/hakyn/srv/HKListener 这是我的主要方法的类。我用过:C:\Users\ryan\workspace\hakyn-server>java -cp Snow.jar;mongo-2.7.2.jar;mysql-connector-java-5.1.1.jar;C:/Users/ryan/workspace/hakyn-server/src/* com.hakyn.srv.HKListener
  • 因为您应该将类​​路径指向已编译的类 (.class) 而不是源代码:C:/Users/ryan/workspace/hakyn-server/src/跨度>
  • 啊,我尝试使用 bin 目录。我仍然遇到同样的错误。
【解决方案2】:

如果您正在运行企业应用程序,请确保 Jar 也可用于部署。这需要另外配置。
如果是 J2SE 应用程序,请检查您的 jar 是否在 run_configuration 属性、类路径选项卡中可见。

如果这不起作用,请尝试在 run_configurations 选项中明确包含 jar 文件在类路径选项中。

【讨论】:

  • 当我查看 run_configurations 时,jar 已经在我的类路径中。
【解决方案3】:

事实证明,该错误仅在使用调试器时引起。这与我进入的代码位于外部 jar 文件中而不是在我的源代码中这一事实有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多