【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class java.net.ProxySelectorjava.lang.NoClassDefFoundError:无法初始化类 java.net.ProxySelector
【发布时间】:2010-12-29 17:33:52
【问题描述】:

我遇到了一个 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) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:732) 在 sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:672) 在 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) 在 com.movi​​ejukebox.thetvdb.TheTVDB.(TheTVDB.java:37) 在 com.movi​​ejukebox.plugin.TheTvDBPlugin.(TheTvDBPlugin.java:57) 在 sun.reflect.GeneratedConstructorAccessor2.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 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) 在 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) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java

【问题讨论】:

  • 请发布一些代码,说明您在做什么,并解释这与您的代码有何关系。否则,您的问题可能会因为“与编程无关”而被关闭。
  • 听起来更像是请求技术支持而不是编程支持
  • 我想这更像是一种技术支持——而不是编程,但它看起来像一个库问题,所以我认为这很简单,我忽略了。

标签: java exception noclassdeffounderror


【解决方案1】:

ProxySelector 是一个抽象类。您是否要直接实例化它?

【讨论】:

  • @Jim:假设 Shinda 直接实例化它,会导致 NoClassDefFoundError 吗?
  • 仅在编译器无法在运行时检测到的奇怪情况下,因为编译时类定义与运行时使用的不同。
【解决方案2】:

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

不要认为它应该在你的 CLASSPATH 中

尝试清除 CLASSPATH 并运行它

【讨论】:

  • 没有类路径对这个错误没有影响。
【解决方案3】:

首先,您不必将“/usr/lib/jvm/jre-1.6.0-openjdk/lib”放在类路径中。 “java”命令应该将所有标准 J2SE 库放在 bootclasspath 中,而无需您执行任何操作。

其次,如果您向我们提供完整的堆栈跟踪信息,而不仅仅是异常消息,将会有所帮助。我怀疑真正的问题是 java.net.ProxySelector (或它依赖的东西)在静态初始化期间失败了。但只有堆栈跟踪才能证实这一点。

【讨论】:

    【解决方案4】:

    由于这是谷歌搜索该错误的第二个结果,我想发布我找到的这段代码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;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 2013-08-08
      • 2020-09-27
      • 2012-08-26
      • 2015-10-29
      • 2017-09-12
      • 2016-07-07
      • 2018-08-01
      相关资源
      最近更新 更多