Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用Java中的包启动线程时,在Eclipse中发现ClassNotFound异常_Multithreading_Eclipse_Package_Classnotfoundexception - Fatal编程技术网

Multithreading 使用Java中的包启动线程时,在Eclipse中发现ClassNotFound异常

Multithreading 使用Java中的包启动线程时,在Eclipse中发现ClassNotFound异常,multithreading,eclipse,package,classnotfoundexception,Multithreading,Eclipse,Package,Classnotfoundexception,我刚刚在Eclipse中重构了一个项目,使用包而不是默认包来更好地组织代码。我有一个测试程序,它创建了许多可运行的对象,每个对象按顺序彼此运行,但与主程序并行 在重构之前,它工作得很好,每个线程都尽职尽责地执行它的任务。然而,自从将东西移动到包中之后,只要一个可运行类尝试使用另一个包中的类,我就会得到一个ClassNotFound异常。跟踪如下: java.lang.ClassNotFoundException: Tweet at java.net.URLClassLoader$1.run(Un

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

在重构之前,它工作得很好,每个线程都尽职尽责地执行它的任务。然而,自从将东西移动到包中之后,只要一个可运行类尝试使用另一个包中的类,我就会得到一个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”是可运行类,“Tweet”是未找到的类。我已经将它作为“common.Tweet”(其中common是包)包含在TweetCleanup中。我使用了一个单独的测试程序来查看它是否可以在主线程中看到该类,该线程已成功运行

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

我正在使用EclipseHelios作为我的IDE

任何提示都将不胜感激

干杯


p

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

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


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

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

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


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

我一直认为类路径是在每个进程的基础上指定的,因为类路径是在调用java命令时指定的。我想你的导入都已经分类了,否则就无法生成。您的所有包是否都安排在项目的src文件夹中?(如果是这样,我希望它们在类路径上)@chrisbunney-是的,所有的都在src文件夹中。Eclipse没有任何错误,只是在运行时。我一直认为类路径是在每个进程的基础上指定的,因为类路径是在调用java命令时指定的。我想你的导入都已经分类了,否则就无法生成。您的所有包是否都安排在项目的src文件夹中?(如果是这样,我希望它们在类路径上)@chrisbunney-是的,所有的都在src文件夹中。Eclipse没有任何错误,这只是在运行时。感谢此mhaller-通过“较旧”对象,您的意思是OIS可能正在读取的文件?通过上次运行的ObjectOutputStream创建的文件。感谢此mhaller-通过“较旧”对象,您的意思是OIS可能正在读取的文件?通过ObjectOutputStream创建的文件从上一次跑步中。