【问题标题】:Why does my PrintWriter throw exceptions when I try to write on it?为什么我的 PrintWriter 在我尝试写入时会抛出异常?
【发布时间】:2011-04-17 15:40:26
【问题描述】:

我有一个将数据发送到服务器的简单 ChatClient。为了让聊天客户端发送数据,我制作了一个 Socket,为 socket.getOutputStream() 制作了一个 PrintWriter,然后执行 writer.println("")。出于某种原因,我得到了一个很大的异常。我查看了与我类似的异常,很多人说要更新 java。但我的 Mac 上有最新版本。是因为我有 Leopard,还是因为我的劣质程序?请看一下。

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)**

我不知道这是什么意思。请帮忙。

【问题讨论】:

  • writerentertext 中的任何一个为空。使用调试器/SOP 来了解是哪一个。

标签: java exception nullpointerexception printwriter


【解决方案1】:

从你的堆栈跟踪和注释来看,听起来就像你打电话时

writer.println(entertext.getText());

SendButtonListeneractionPerformed 方法中,writer enterText 为空。

哪个是 null,从代码中不清楚它是如何产生的,但您应该能够通过调试器或日志记录来弄清楚。

【讨论】:

  • 所以我检查了我的代码,结果发现当我调用 print 时 writer 为空。我是否给它赋值,如果是,如何赋值?感谢您的建议。
  • 您的 setupNetworking 方法中的代码应该或多或少地用于创建编写器,但您需要确保在需要发送之前调用它。您还应该确保在使用后正确关闭它,并在出现异常时关闭它。
【解决方案2】:

这里是如何调试它 - 要么:

  • 输入一个单独的 println 以打印每个可能为 null 的内容,就在它出现异常之前
  • 或在调试器中运行它(例如 Eclipse 提供了一个),然后查看当您得到该行时变量的值是什么

【讨论】:

    【解决方案3】:

    检查.SimpleChatClient的第52行,ir.null里面的东西

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多