日期:2014-05-19  浏览次数:20641 次

请问这个是什么错误
tomcat,javabean+servlet
异常信息:

Assembly code
2012-3-1 9:41:21 org.apache.tomcat.util.net.NioEndpoint$Poller processSendfile
严重: 
java.lang.IllegalArgumentException: You can only write using the application write buffer provided by the handler.
    at org.apache.tomcat.util.net.SecureNioChannel.write(SecureNioChannel.java:472)
    at sun.nio.ch.FileChannelImpl.transferToArbitraryChannel(FileChannelImpl.java:465)
    at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:514)
    at org.apache.tomcat.util.net.NioEndpoint$Poller.processSendfile(NioEndpoint.java:1244)
    at org.apache.tomcat.util.net.NioEndpoint$Poller.processKey(NioEndpoint.java:1176)
    at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1136)
    at java.lang.Thread.run(Thread.java:662)



这是全部的异常信息
我只访问了一个servlet,就包这些了

------解决方案--------------------
最好具体的代码贴出来瞧瞧。
还真没遇到过。

这个应该是源代码
Java code

 /**
     * Writes a sequence of bytes to this channel from the given buffer.
     *
     * @param src The buffer from which bytes are to be retrieved
     * @return The number of bytes written, possibly zero
     * @throws IOException If some other I/O error occurs
     * TODO Implement this java.nio.channels.WritableByteChannel method
     */
    @Override
    public int write(ByteBuffer src) throws IOException {
        if ( src == this.netOutBuffer ) {
            //we can get here through a recursive call
            //by using the NioBlockingSelector
            int written = sc.write(src);
            return written;
        } else {
            //make sure we can handle expand, and that we only use on buffer
            if ( (!this.isSendFile()) && (src != bufHandler.getWriteBuffer()) ) throw new IllegalArgumentException("You can only write using the application write buffer provided by the handler.");
            //are we closing or closed?
            if ( closing || closed) throw new IOException("Channel is in closing state.");

            //the number of bytes written
            int written = 0;

            if (!flush(netOutBuffer)) {
                //we haven't emptied out the buffer yet
                return written;
            }