2009-12-24 34 views
3

我遇到一个问题,一个Java应用程序不断抛出:java.lang.NoClassDefFoundError:无法初始化类java.net.ProxySelector中

java.lang.NoClassDefFoundError: Could not initialize class 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: Could not initialize class java.net.ProxySelector at 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) at com.moviejukebox.thetvdb.tools.XMLHelper.getEventReader(XMLHelper.java:19) at com.moviejukebox.thetvdb.model.Mirrors.(Mirrors.java:30) at com.moviejukebox.thetvdb.TheTVDB.(TheTVDB.java:37) at 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) at java.lang.Class.newInstance0(Class.java:372) at java.lang.Class.newInstance(Class.java:325) at com.moviejukebox.plugin.DatabasePluginController.getMovieDatabasePlugin(DatabasePluginController.java:96) at com.moviejukebox.plugin.DatabasePluginController.access$000(DatabasePluginController.java:30) at com.moviejukebox.plugin.DatabasePluginController$1.initialValue(DatabasePluginController.java:44) at com.moviejukebox.plugin.DatabasePluginController$1.initialValue(DatabasePluginController.java:39) at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:160) at java.lang.ThreadLocal.get(ThreadLocal.java:150) at com.moviejukebox.plugin.DatabasePluginController.scan(DatabasePluginController.java:70) at com.moviejukebox.MovieJukebox.updateMovieData(MovieJukebox.java:1051) at com.moviejukebox.MovieJukebox.access$100(MovieJukebox.java:80) at com.moviejukebox.MovieJukebox$4.call(MovieJukebox.java:613) at 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) at java.lang.Thread.run(Thread.java

+0

请张贴一些代码,显示你在做什么,并解释它是如何与你的代码相关的。不然的话,你的问题很可能会因为“与编程无关”而关闭。 – 2009-12-24 05:20:33

+0

听起来更像是这个技术支持请求而不是编程支持 – 2009-12-24 05:28:42

+0

我想这是一种技术支持 - 不仅仅是编程,它看起来像一个图书馆问题,所以我认为它会是我忽略的简单东西。 – SS44 2009-12-24 07:01:33

回答

1

的ProxySelector是一个抽象类。你是否试图直接实例化它?

+2

@Jim:让Shinda直接实例化它,会导致NoClassDefFoundError? – codaddict 2009-12-24 05:15:28

+0

只有在编译时由于编译时类定义与运行时使用的不同而导致编译器无法检测到的奇怪情况下。 – 2009-12-24 05:17:34

0

My CLASSPATH is set to /usr/lib/jvm/jre-1.6.0-openjdk/lib.

不认为应该在你的CLASSPATH

尝试清除CLASSPATH并运行它

+0

没有类路径没有与这个错误有所不同。 – SS44 2009-12-24 06:58:05

0

首先,你不应该把“/ usr/lib中/ JVM/JRE -1.6.0-openjdk/lib“。 “java”命令应该将所有标准的J2SE库放在bootclasspath上,而无需执行任何操作。其次,如果你给我们完整的堆栈跟踪,而不仅仅是异常消息,它会有所帮助。我怀疑真正的问题是java.net.ProxySelector(或者它依赖的东西)在静态初始化期间失败。但只有一个堆栈跟踪会证实这一点。

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; 
    } 
} 
相关问题