2011-04-17 61 views
0

我有一个简单的ChatClient将数据发送到服务器。为了使聊天客户端发送数据,我创建了一个Socket,使用PrintWriter创建socket.getOutputStream(),然后执行writer.println(“”)。出于某种原因,我得到了一个很大的例外。我看了类似的例外,很多人都说要更新java。但是我的Mac上有最新版本。是因为我有Leopard,还是它是我的劣质编程?请看一下。为什么我的PrintWriter在我尝试写入时会抛出异常?

private void setUpNetworking() { 

     try { 
      **sock = new Socket("127.0.0.1", 65534);** 
      InputStreamReader streamReader = new InputStreamReader(sock.getInputStream()); 
      reader = new BufferedReader(streamReader); 

      **writer = new PrintWriter(sock.getOutputStream());** 
      System.out.println("made connection... everything here works"); 

     } 
     catch (IOException ex) { 
      ex.printStackTrace(); 
      System.out.println("setup fail, but i didn't get this"); 

     } 
    } 

    public class SendButtonListener implements ActionListener{ 
     public void actionPerformed (ActionEvent ev){ 
      try { 
       **writer.println(entertext.getText());** 
       **writer.flush();** 
       System.out.println("PROBLEM IS RIGHT HERE!!!"); 

      } 
      catch (Exception ex) { 
       ex.printStackTrace(); 
       System.out.println("i get a exception. HELP"); 

      } 

这里是我的例外:

java.lang.NullPointerException 
    at SimpleChatClient$SendButtonListener.actionPerformed(SimpleChatClient.java:52) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:246) 
    at java.awt.Component.processMouseEvent(Component.java:5617) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3129) 
    at java.awt.Component.processEvent(Component.java:5382) 
    at java.awt.Container.processEvent(Container.java:2010) 
    at java.awt.Component.dispatchEventImpl(Component.java:4083) 
    at java.awt.Container.dispatchEventImpl(Container.java:2068) 
    at java.awt.Component.dispatchEvent(Component.java:3918) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866) 
    at java.awt.Container.dispatchEventImpl(Container.java:2054) 
    at java.awt.Window.dispatchEventImpl(Window.java:1801) 
    at java.awt.Component.dispatchEvent(Component.java:3918) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:501) 
    at java.awt.EventQueue.access$000(EventQueue.java:80) 
    at java.awt.EventQueue$1.run(EventQueue.java:462) 
    at java.awt.EventQueue$1.run(EventQueue.java:461) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:95) 
    at java.awt.EventQueue$2.run(EventQueue.java:476) 
    at java.awt.EventQueue$2.run(EventQueue.java:475) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:473) 
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176) 
    **at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)** 

我不知道这意味着什么。请帮忙。

+0

或者'writer'或者'entertext'都是null。使用调试器/ SOP知道哪一个。 – Nishant 2011-04-17 16:01:38

回答

1

从您的堆栈跟踪和笔记,这听起来当您在SendButtonListeneractionPerformed方法调用

writer.println(entertext.getText()); 

一样,无论是writerenterText为空。

哪一个是空的,它如何得到这种方式在代码中是不清楚的,但你应该能够通过调试器或日志记录找出它。

+0

所以我查了我的代码,事实证明,当我打印时,writer是空的。我是否给它赋值,如果是这样,怎么样?感谢您的建议。 – 2011-04-17 16:42:51

+0

你已经在你的setupNetworking方法中获得了代码,它应该或多或少地用于创建作者,但是你需要确保在你需要发送之前调用它。你也应该确保在使用它之后正确地关闭它,并且如果有异常它会被关闭。 – 2011-04-17 17:02:01

0

下面是如何调试这一点 - 无论是:

  • 放在一个单独的println打印,可能是零,它具有异常
  • 之前或者在调试器中运行它每一件事情(Eclipse提供一个,例如),看看变量的值,当你得到该行
0

Chekc线52 of.SimpleChatClient是,一些有ir.null

相关问题