java.lang.NoClassDefFoundError:无法初始化类java.net.ProxySelector

时间:2009-12-24 05:10:09

标签: java exception noclassdeffounderror

我遇到了一个经常抛出java应用程序的问题:

  

java.lang.NoClassDefFoundError:无法初始化类java.net.ProxySelector。

我正在运行Suse Linux 10.3并运行java 1.6.0。我的CLASSPATH设置为

  

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

没有其他用户似乎有这个错误,所以我假设我的设置。对于那些想知道该应用程序是yamj(http://code.google.com/p/moviejukebox/

的人

关于可能遗漏的内容或我可能做错的任何想法?

编辑错误的完整跟踪如下:

  

java.lang.NoClassDefFoundError:无法初始化类java.net.ProxySelector       在sun.net.www.protocol.http.HttpURLConnection $ 5.run(HttpURLConnection.java:736)       at java.security.AccessController.doPrivileged(Native Method)       at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:732)       at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:672)       at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:997)       在com.movi​​ejukebox.thetvdb.tools.XMLHelper.getEventReader(XMLHelper.java:19)       在com.movi​​ejukebox.thetvdb.model.Mirrors。(Mirrors.java:30)       at com.movi​​ejukebox.thetvdb.TheTVDB。(TheTVDB.java:37)       在com.movi​​ejukebox.plugin.TheTvDBPlugin。(TheTvDBPlugin.java:57)       at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at java.lang.reflect.Constructor.newInstance(Constructor.java:532)       在java.lang.Class.newInstance0(Class.java:372)       在java.lang.Class.newInstance(Class.java:325)       在com.movi​​ejukebox.plugin.DatabasePluginController.getMovieDatabasePlugin(DatabasePluginController.java:96)       在com.movi​​ejukebox.plugin.DatabasePluginController.access $ 000(DatabasePluginController.java:30)       在com.movi​​ejukebox.plugin.DatabasePluginController $ 1.initialValue(DatabasePluginController.java:44)       在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)       在com.movi​​ejukebox.plugin.DatabasePluginController.scan(DatabasePluginController.java:70)       在com.movi​​ejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051)       在com.movi​​ejukebox.MovieJukebox.access $ 100(MovieJukebox.java:80)       在com.movi​​ejukebox.MovieJukebox $ 4.call(MovieJukebox.java:613)       在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)       在java.lang.Thread.run(Thread.java

4 个答案:

答案 0 :(得分:1)

ProxySelector是一个抽象类。你想直接实例化吗?

答案 1 :(得分:0)

  

我的CLASSPATH设置为   /usr/lib/jvm/jre-1.6.0-openjdk/lib。

不要认为应该在你的CLASSPATH中

尝试清除CLASSPATH并运行它

答案 2 :(得分:0)

首先,您不必将“/usr/lib/jvm/jre-1.6.0-openjdk/lib”放在类路径上。 “java”命令应该将所有标准J2SE库放在bootclasspath上而不做任何事情。

其次,如果你给我们完整的堆栈跟踪,而不仅仅是异常消息,它会有所帮助。我怀疑真正的问题是java.net.ProxySelector(或它所依赖的东西)在静态初始化期间失败了。但只有堆栈跟踪可以确认。

答案 3 :(得分:0)

由于这是谷歌搜索此错误的第二个结果,我想发布这段代码,我发现at some forum帮助了我同样的例外。无法详细解释 - 这对我来说只是一个快速测试项目,所以我没有时间进行更深入的调查。

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;
  }
}