Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JRE 1.7.4和x2B中扩展SocketChannel;_Java - Fatal编程技术网

Java 在JRE 1.7.4和x2B中扩展SocketChannel;

Java 在JRE 1.7.4和x2B中扩展SocketChannel;,java,Java,我刚刚尝试扩展SocketChannel,但似乎从JRE 1.7.4开始,SocketChannel有了一些新的API方法(http://openjdk.java.net/projects/nio/javadoc/java/nio/channels/SocketChannel.html),问题是,如果我实现了这些方法,每当我使用Java1.6时,我的JAR就会抛出以下错误 Exception in thread "Thread-24" java.lang.NoClassDefFoundError

我刚刚尝试扩展SocketChannel,但似乎从JRE 1.7.4开始,SocketChannel有了一些新的API方法(http://openjdk.java.net/projects/nio/javadoc/java/nio/channels/SocketChannel.html),问题是,如果我实现了这些方法,每当我使用Java1.6时,我的JAR就会抛出以下错误

Exception in thread "Thread-24" java.lang.NoClassDefFoundError: java/nio/channels/NetworkChannel
现在我明白了为什么会出现与“java/nio/channels/NetworkChannel”相关的错误,似乎SocketChannel从JRE 1.7开始与NetworkChannel接口

现在,当我使用JRE 1.7.4+时,出现了一些运行时错误,实际上奇怪的是,即使我实现了这些新的API方法,当我调用“unwrap”方法时,也会出现运行时错误

在这一行中,我只调用sslEngine.unwrap方法,所以简而言之,当我实现了新的API方法时,它只适用于JRE 1.7.0到1.7.3


如何使我的JAR与JRE 1.6和1.7兼容,同时扩展SocketChannel类?

好的,似乎我已经指出了JRE 1.7.4+上运行时错误的问题,它似乎不是真正的展开错误,而是证书错误,同样,每当调用SSLEngine.unwrap时出现运行时错误时,我也会遇到以下错误

Exception in thread "Thread-24" java.lang.RuntimeException: Delegated task threw Exception/Error
at sun.security.ssl.Handshaker.checkThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.readNetRecord(Unknown Source)
at sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)
at javax.net.ssl.SSLEngine.unwrap(Unknown Source)
.....
Caused by: java.lang.UnsupportedOperationException
at ....RTMPSTrustManager.getAcceptedIssuers(....)
愚蠢的我,我应该注意到“由引起”这个短语,因为我下面有这段代码,所以从JRE 1.7.4开始,如果我在getAcceptedAssuers()中抛出一个异常,那么我就会遇到这个问题,所以我只是没有抛出一个异常,而是返回null。我不确定1.7.4+问题是否与此修复相关(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7142172)但事实似乎确实如此

public java.security.cert.X509Certificate[] getAcceptedIssuers()
    {
        return null;
        //throw new UnsupportedOperationException();
    }

感谢您的耐心

好的,我似乎已经指出了JRE 1.7.4+上运行时错误的问题,它似乎不是真正的展开错误,而是证书错误,同样,每当我调用SSLEngine.unwrap时遇到运行时错误时,我也会遇到以下错误

Exception in thread "Thread-24" java.lang.RuntimeException: Delegated task threw Exception/Error
at sun.security.ssl.Handshaker.checkThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.readNetRecord(Unknown Source)
at sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)
at javax.net.ssl.SSLEngine.unwrap(Unknown Source)
.....
Caused by: java.lang.UnsupportedOperationException
at ....RTMPSTrustManager.getAcceptedIssuers(....)
愚蠢的我,我应该注意到“由引起”这个短语,因为我下面有这段代码,所以从JRE 1.7.4开始,如果我在getAcceptedAssuers()中抛出一个异常,那么我就会遇到这个问题,所以我只是没有抛出一个异常,而是返回null。我不确定1.7.4+问题是否与此修复相关(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7142172)但事实似乎确实如此

public java.security.cert.X509Certificate[] getAcceptedIssuers()
    {
        return null;
        //throw new UnsupportedOperationException();
    }

谢谢你的耐心

你有什么建议吗?通常,拥有一个比Development-JDK更“新”的JRE应该没有问题。如果我在JRE 1.6中编译JAR,然后在JRE 1.7中运行它,而没有实现新方法,那么我在线程“thread-27”java.lang.RuntimeException中得到以下错误异常:委派任务在sun.security.ssl.Handshaker.checkThrown处抛出异常/错误(未知源)在sun.security.ssl.SSLEngineImpl.CheckTaskSwink(未知源)在sun.security.ssl.SSLEngineImpl.readNetRecord(未知源)在sun.security.ssl.SSLEngineImpl.unwrap(未知源)在javax.net.ssl.SSLEngine.unwrap(未知源)可以添加一些代码吗?这对我来说真的没有任何意义。@Code.Blodded-这是整个堆栈跟踪吗?我根本不引用任何网络通道这里是标记为@Override public SocketChannel shutdownOutput()抛出IOException{return SocketChannel.shutdownOutput();}的方法的示例实现你有什么线索吗?通常,拥有一个比Development-JDK更“新”的JRE应该没有问题。如果我在JRE 1.6中编译JAR,然后在JRE 1.7中运行它,而没有实现新方法,那么我在线程“thread-27”java.lang.RuntimeException中得到以下错误异常:委派任务在sun.security.ssl.Handshaker.checkThrown处抛出异常/错误(未知源)在sun.security.ssl.SSLEngineImpl.CheckTaskSwink(未知源)在sun.security.ssl.SSLEngineImpl.readNetRecord(未知源)在sun.security.ssl.SSLEngineImpl.unwrap(未知源)在javax.net.ssl.SSLEngine.unwrap(未知源)可以添加一些代码吗?这对我来说真的没有任何意义。@Code.Blodded-这是整个堆栈跟踪吗?我根本不引用任何网络通道这里是标记为@Override public SocketChannel shutdownOutput()抛出IOException{return SocketChannel.shutdownOutput();}的方法的示例实现从该方法返回null无效。检查Javadoc。至少,您应该返回一个空数组,但是如果这是臭名昭著的trust Anywhere TrustManager,那么您应该将其扔掉,让您的证书正常工作。它是非常不安全的,不能被合并到新代码中。从该方法返回null是无效的。检查Javadoc。至少,您应该返回一个空数组,但是如果这是臭名昭著的trust Anywhere TrustManager,那么您应该将其扔掉,让您的证书正常工作。它从根本上是不安全的,不能被合并到新代码中。