【问题标题】:ClassNotFound Exception in Eclipse when starting thread, using packages in Java使用Java中的包启动线程时Eclipse中的ClassNotFound异常
【发布时间】:2010-12-15 05:03:49
【问题描述】:

我刚刚在 Eclipse 中重构了一个项目以使用包而不是默认包来更好地组织我的代码。我有一个测试程序,它创建了许多 Runnable 对象,每个对象都按顺序运行,但与主程序并行。

在重构之前,这工作正常,每个线程都尽职尽责地执行其任务。但是,由于将东西移入包中,只要其中一个 Runnable 类尝试使用另一个包中的类,我就会收到 ClassNotFound 异常。堆栈跟踪如下:

java.lang.ClassNotFoundException: Tweet
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at indexing.TweetCleanup.run(TweetCleanup.java:84)
at java.lang.Thread.run(Unknown Source)

在此跟踪中,“TweetCleanup”是 Runnable 类,“Tweet”是未找到的类。我已将其作为“common.Tweet”包含在 TweetCleanup 中(其中 common 是包)。我使用了一个单独的测试程序,看看它是否可以看到主线程中的类,它运行成功。

我能想到的只是需要为 Thread 提供一些类路径来“查看”Tweet 类,但是在重构为包之前情况并非如此。我相信子线程的默认行为是使用其父线程的类路径,其中包括“common.Tweet”。

我使用 Eclipse Helios 作为我的 IDE。

任何提示将不胜感激!

干杯,

P

【问题讨论】:

  • 我一直认为类路径是基于每个进程指定的,因为在调用 java 命令时指定了类路径。我想你的进口都是排序的,否则它不会建立。您的所有包都安排在项目的 src 文件夹中吗? (如果是这样,我希望它们在类路径上)
  • @chrisbunney - 是的,都在 src 文件夹中。 Eclipse 没有任何错误,它只是在运行时。

标签: multithreading eclipse package classnotfoundexception


【解决方案1】:

根本不是线程问题,但您以某种方式使用 Java 序列化,并尝试从存储了“较旧”对象的流中读取对象。

我怀疑您正在通过 Java 序列化使用某种持久性,并且您的 TweetCleanup-Thread 正在读取旧的“数据库”。删除此文件,您的程序将再次运行。

请注意,重命名包或移动类是二进制不兼容的更改 - 您不能再反序列化此类对象。

【讨论】:

  • 感谢这个 mhaller - “旧”对象是指 OIS 正在读取的文件吗?
  • ObjectOutputStream 上次运行创建的文件。
猜你喜欢
  • 2013-03-15
  • 2019-08-04
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2011-09-16
  • 2019-05-07
相关资源
最近更新 更多