我遇到了一个经常抛出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.moviejukebox.thetvdb.tools.XMLHelper.getEventReader(XMLHelper.java:19) 在com.moviejukebox.thetvdb.model.Mirrors。(Mirrors.java:30) at com.moviejukebox.thetvdb.TheTVDB。(TheTVDB.java:37) 在com.moviejukebox.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.moviejukebox.plugin.DatabasePluginController.getMovieDatabasePlugin(DatabasePluginController.java:96) 在com.moviejukebox.plugin.DatabasePluginController.access $ 000(DatabasePluginController.java:30) 在com.moviejukebox.plugin.DatabasePluginController $ 1.initialValue(DatabasePluginController.java:44) 在com.moviejukebox.plugin.DatabasePluginController $ 1.initialValue(DatabasePluginController.java:39) at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:160) 在java.lang.ThreadLocal.get(ThreadLocal.java:150) 在com.moviejukebox.plugin.DatabasePluginController.scan(DatabasePluginController.java:70) 在com.moviejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051) 在com.moviejukebox.MovieJukebox.access $ 100(MovieJukebox.java:80) 在com.moviejukebox.MovieJukebox $ 4.call(MovieJukebox.java:613) 在com.moviejukebox.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
答案 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;
}
}