3

私はJavaアプリが絶えず投げる問題に遭遇しています:

java.lang.NoClassDefFoundError:クラスjava.net.ProxySelectorを初期化できませんでした。

Suse Linux 10.3を実行していて、java1.6.0を実行しています。私のCLASSPATHはに設定されています

/usr/lib/jvm/jre-1.6.0-openjdk/lib。

他のユーザーにはこのエラーが発生していないようですので、自分の設定を想定しています。アプリがyamjだと思っている人のために(http://code.google.com/p/moviejukebox/

何が欠けているのか、何が間違っているのかについてのアイデアはありますか?

エラーの完全なトレースを編集するには、次のようにします。

java.lang.NoClassDefFoundError:sun.net.www.protocol.http.HttpURLConnection $ 5.run(HttpURLConnection.java:736)のクラスjava.net.ProxySelectorをjava.security.AccessController.doPrivileged(ネイティブメソッド)で初期化できませんでしたsun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:732)at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:672)atsun.net.www.protocol。 http.HttpURLConnection.getInputStream(HttpURLConnection.java:997)at com.movi​​ejukebox.thetvdb.tools.XMLHelper.getEventReader(XMLHelper.java:19)at com.movi​​ejukebox.thetvdb.model.Mirrors。(Mirrors.java:30)at com.movi​​ejukebox.thetvdb.TheTVDB。(TheTVDB.java:37)at com.movi​​ejukebox.plugin.TheTvDBPlugin。(TheTvDBPlugin.java:57)atsun.reflect.GeneratedConstructorAccessor2。newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:532)at java.lang.Class.newInstance0(Class.java: 372)at java.lang.Class.newInstance(Class.java:325)at com.movi​​ejukebox.plugin.DatabasePluginController.getMovieDatabasePlugin(DatabasePluginController.java:96)at com.movi​​ejukebox.plugin.DatabasePluginController.access $ 000(DatabasePluginController.java: 30)com.movi​​ejukebox.plugin.DatabasePluginController $ 1.initialValue(DatabasePluginController.java:44)at com.movi​​ejukebox.plugin.DatabasePluginController $ 1.initialValue(DatabasePluginController.java:39)at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java :160)java.lang.ThreadLocalで。get(ThreadLocal.java:150)at com.movi​​ejukebox.plugin.DatabasePluginController.scan(DatabasePluginController.java:70)at com.movi​​ejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051)at com.movi​​ejukebox.MovieJukebox.access $ 100( MovieJukebox.java:80)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:613)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:600)at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:334)at java.util.concurrent.FutureTask.run(FutureTask.java:166)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor $ java.lang.Thread.run(Thread.java)のWorker.run(ThreadPoolExecutor.java:603)scan(DatabasePluginController.java:70)at com.movi​​ejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051)at com.movi​​ejukebox.MovieJukebox.access $ 100(MovieJukebox.java:80)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox .java:613)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:600)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)at java.util.concurrent.FutureTask.run (FutureTask.java:166)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)atjava.lang.Thread。 run(Thread.javascan(DatabasePluginController.java:70)at com.movi​​ejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051)at com.movi​​ejukebox.MovieJukebox.access $ 100(MovieJukebox.java:80)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox .java:613)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:600)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)at java.util.concurrent.FutureTask.run (FutureTask.java:166)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)atjava.lang.Thread。 run(Thread.javajava:80)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:613)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:600)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask .java:334)at java.util.concurrent.FutureTask.run(FutureTask.java:166)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker。 run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.javajava:80)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:613)at com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:600)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask .java:334)at java.util.concurrent.FutureTask.run(FutureTask.java:166)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker。 run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.javarunWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.javarunWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java

4

4 に答える 4

1

ProxySelectorは抽象クラスです。直接インスタンス化しようとしていますか?

于 2009-12-24T05:13:20.263 に答える
0

このエラーに関する Google 検索の 2 番目の結果であるため、フォーラムで見つけたこのコードを投稿して、同じ例外を解決するのに役立ちました。詳細を説明することはできません。これは私にとって簡単なテスト プロジェクトであったため、詳細な調査を行う時間がありませんでした。

static { 
  try {
    Class c = Class.forName("sun.net.spi.DefaultProxySelector");
    if (c != null && ProxySelector.class.isAssignableFrom(c)) {
       theProxySelector = (ProxySelector) c.newInstance();
    }
  } catch (Exception e) {
    theProxySelector = null;
  }
}
于 2012-12-27T16:21:56.583 に答える
0

私の CLASSPATH は /usr/lib/jvm/jre-1.6.0-openjdk/lib に設定されています。

それがあなたのCLASSPATHにあるべきだとは思わないでください

CLASSPATH をクリアして実行してみてください

于 2009-12-24T05:29:45.987 に答える
0

まず、クラスパスに「/usr/lib/jvm/jre-1.6.0-openjdk/lib」を配置する必要はありません。「java」コマンドは、何もしなくても、すべての標準 J2SE ライブラリを bootclasspath に置く必要があります。

次に、例外メッセージだけでなく、完全なスタック トレースを提供していただけると助かります。本当の問題は、静的初期化中に java.net.ProxySelector (またはそれに依存するもの) が失敗していることだと思います。しかし、それを確認できるのはスタックトレースだけです。

于 2009-12-24T05:50:22.630 に答える