Eclipseでプロジェクトをリファクタリングして、デフォルトパッケージの代わりにパッケージを使用してコードを整理しました。私はいくつかのRunnableオブジェクトを作成するテストプログラムを持っています。これらの各オブジェクトはお互いに連続して実行されますが、メインプログラムと並行して実行されます。ClassNotFound Javaでパッケージを使用してスレッドを開始するときにEclipseで例外が発生する
リファクタリングする前に、これはうまく機能し、各スレッドは忠実にそのタスクを実行しました。しかし、パッケージを移動すると、Runnableクラスの1つが別のパッケージのクラスを使用しようとするとすぐにClassNotFound例外が発生します。 「TweetCleanup」このトレースで
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)
のRunnableクラスであり、そして「さえずる」が見つかりませんクラスです:スタックトレースは次の通りです。私はTweetCleanupに 'common.Tweet'(commonはパッケージ)を含めました。私は別のテストプログラムを使用して、正常に実行されるメインスレッドのクラスを参照できるかどうかを確認しました。
私は考えることができるのは、Tweetクラスのクラスパスを提供する必要がありますが、これはパッケージとしてのリファクタリング前のケースではありませんでした。私は、子スレッドのデフォルトの動作は、 'common.Tweet'を含む親のクラスパスを使用することだと考えています。
私はIDEとしてEclipse Heliosを使用しています。
ヒントをいただければ幸いです!
乾杯、
P
javaコマンドを呼び出すときにクラスパスが指定されているため、クラスパスがプロセスごとに指定されているといつも思っていました。私はあなたの輸入品はすべてソートされていると推測します。そうでなければそれは構築されません。すべてのパッケージはプロジェクトのsrcフォルダ内に配置されていますか? (もしそうなら、私はそれらがクラスパス上にあることを期待します) – chrisbunney
@chrisbunney - はい、すべてsrcフォルダにあります。 Eclipseにはエラーはなく、実行時にのみ発生します。 – codinghands