2016-12-24 27 views
0

Nettyの調査には初めてです。なぜ私はサーバーにメッセージを送信できないのか知りたかったのです。 MainSocketクラスは、openConnectやoutDataなどのメインメソッド を非表示にします。これがお待ちしておりますのでチャネルネットにデータを書き込むことができません

future.channel().closeFuture().sync(); 

public abstract class MainSocket { 
private final static String HOST = "localhost"; 
private static final int PORT = 8790; 

private EventLoopGroup workerGroup ; 
private Channel channel; 
private ChannelFuture future; 
private Bootstrap bootstrap; 


public void sendData(ByteBuf out){ 
    outData(out); 
} 
public void connect(){ openConnection(); } 


public abstract void sendMessage(String msg); 
public abstract void createConnect(); 

/* 
Here I am trying to write into the channel*/ 
private void outData(ByteBuf out){ 

    future= channel.writeAndFlush(out); 
    //future.channel(); 
} 

private void openConnection() { 
    workerGroup = new NioEventLoopGroup(); 
    try { 
     bootstrap = new Bootstrap(); 
     bootstrap.group(workerGroup).channel(NioSocketChannel.class) 
       .handler(new SocketInit()); 
     future = bootstrap.connect(HOST,PORT).sync(); 

     future.channel().closeFuture().sync(); 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } finally { 
     workerGroup.shutdownGracefully(); 
    } 
} 

} 

クラスの相続人は、私はあなたの問題は、OpenConnectionメソッドであると信じてBYF

public class SocketClient extends MainSocket { 
    private MainSocket clientSocket; 
    ClientEncoder clientEncoder; 
    @Override 
    public void createConnect() { 
    connect(); 

} 

@Override 
public void sendMessage(String msg) { 
    final String msga = msg; 
    ByteBuf data = Unpooled.wrappedBuffer(msga.getBytes()); 
    sendData(data); 
} 


} 

エラースタック

xception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Node.fireEvent(Node.java:8413) 
at javafx.scene.control.Button.fire(Button.java:185) 
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEve n tDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at  com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Glass ViewEventHandler.java:381) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Glass ViewEventHandler.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(Glas sViewEventHandler.java:417) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.jav a:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventH andler.java:416) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
... 48 more 
Caused by: java.lang.NullPointerException 
at azuki.com.connection.MainSocket.outData(MainSocket.java:40) 
at azuki.com.connection.MainSocket.sendData(MainSocket.java:28) 
at azuki.com.connection.SocketClient.sendMessage(SocketClient.java:26) 
at  azuki.com.controller.MessageController.sendMessage(MessageController.java:43) 
... 58 more 

Process finished with exit code 1 
+0

あなたが見ているエラー/問題を与える必要があります。 – Aaron

+0

@Aaronは例外的に出発します - 未来の= channel.writeAndFlush(out); – leadad

+0

このコードでは 'channel'に値を割り当てません。投稿したコードには何かがありませんか?もしそうでなければ、それが問題です。 – diesieben07

答えて

0

をバイトにStringを変換し、無限に例外が発生した場合を除いて、チャネルは戻ってくる前に閉じられています。

したがって、nullポインタ例外は、おそらくあなたのチャンネルが割り当てられていないので、/接続(タイムアウト?)です。 closeFuture()。sync()は、チャンネルが閉じられるのを確実に待つことができます(そして、明らかに閉じることもできます)。

関連する問題