2013-08-21 3 views
0

это мой код, и у меня есть проблема ниже для чтения ... когда соединение принято, это произойдет!java.lang.NullPointerException at sun.nio.ch.AsynchronousSocketChannelImpl.read

int port = 8080; 
     try { 
      final AsynchronousChannelGroup group = AsynchronousChannelGroup.withThreadPool(Executors 
        .newSingleThreadExecutor()); 
      final AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open(group).bind(
        new InetSocketAddress(port)); 

      System.out.println("Server listening on " + port); 
      server.accept("Client connection", 
        new CompletionHandler<AsynchronousSocketChannel, Object>() { 
       public void completed(AsynchronousSocketChannel ch, Object att) { 
        System.out.println("Accepted a connection"); 
        ByteBuffer arg0= null; 
        ch.read(arg0); 
        System.out.println(arg0.toString()); 
        server.accept("Client connection", this); 
       } 

       public void failed(Throwable exc, Object att) { 
        System.out.println("Failed to accept connection"); 
       } 
      }); 
      group.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); 
     } catch (IOException | InterruptedException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

журнала и ошибок:

Server listening on 8080 
Accepted a connection 
Exception in thread "pool-1-thread-1" java.lang.NullPointerException 
    at sun.nio.ch.AsynchronousSocketChannelImpl.read(AsynchronousSocketChannelImpl.java:277) 
    at SafeSurf$1.completed(SafeSurf.java:27) 
    at SafeSurf$1.completed(SafeSurf.java:1) 
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) 
    at sun.nio.ch.Invoker$2.run(Invoker.java:206) 
    at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

, что моя проблема и когда она решена делает arg0 заправить, что он читает?
любая помощь, оказанная.

ответ

1

Учитывая

ByteBuffer arg0= null; 
    ch.read(arg0); 

Вам не нужно выделить ваш ByteBuffer первым?

например.

ByteBuffer buffer = ByteBuffer.allocate(size); 
+0

если я не знаю, какой размер подходит для меня? –

0

Я предполагаю, что линия ch.read(arg0); вызывает ошибку. Вы устанавливаете arg0 равным null, а затем пытаетесь записать в него, но до этого вам, вероятно, нужно будет инициализировать его так: arg0=ByteBuffer.allocate(desired_capacity);

Если вы не знаете, какую емкость выбрать, вы можете установить ByteBuffer на максимальный размер, который следует ожидать.

Смежные вопросы