【问题标题】:Socket.getOutputStream() on a null object reference [duplicate]空对象引用上的 Socket.getOutputStream() [重复]
【发布时间】:2017-05-05 06:59:51
【问题描述】:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.io.OutputStream java.net.Socket.getOutputStream()”

在你标记这个之前,我对此很陌生,我在发布之前尝试搜索解决这个问题的方法,但我似乎找不到解决方案。希望你能理解。

我在运行 on change 侦听器时收到此错误。

seekbarbrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
      @Override
      public void onProgressChanged(SeekBar seekbarbrightness, int progress, boolean b) {
           if(b==true) {
                tblumens.setText(String.valueOf(progress) + " Lumens");
                try {
                     socket.getOutputStream().write(String.valueOf(progress).getBytes());

                    } catch (IOException e) {
                      }
           }
     }
});

我在onCreate 方法中运行以下代码。

class ClientThread implements Runnable {

    @Override
    public void run() {
        try {
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
            check = "fail";
            socket = new Socket(serverAddr, SERVERPORT);
            check = "success";

        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

有什么问题?是因为我的套接字连接没有正确初始化吗? (另外,我的服务器还没有运行,但是,catch 会显示错误,不是吗?)

我尝试使用 if socket.isConnected() 函数,然后执行 try 和 catch,但没有任何区别..

请帮忙!我搜索了很多教程,并找到了这些用于套接字客户端连接的代码。

【问题讨论】:

  • socket 显然是空的,显然这是因为连接失败。 Socket.isConnected() 不可能有帮助,因为你没有 Socket
  • 啊,有没有办法避免崩溃?就像在连接失败之后,也许手机可以通过吐司让我知道连接失败,而不是在我移动搜索栏时让它崩溃?
  • 确实让你知道了。有一个ConnectException。否则你有一个编程错误。您是否考虑过测试socket == null
  • omg 我做了一个 if(socket!=null) ,是的,现在我的应用程序停止因连接失败而崩溃。谢谢伙计,看起来我误解了并继续使用 socket.isConnected() 而不是检查它是否不为空。太感谢了。也许我应该改变问题的标题。
  • 这还有另一个方面。除非有连接,否则用户不应按下 UI 按钮。您应该禁用需要连接的 UI 部分,直到有连接为止。

标签: java android sockets outputstream


【解决方案1】:

您是否接受了与客户端的套接字连接?

socket.accept();

我认为您的 socket.getOutputStream() 在 setOnSeekBarChangeListener 中可能为空

【讨论】:

  • 这个客户端;他的套接字是Socket,它没有accept() 方法;并且ServerSocket.accept() 的结果需要存储在某个地方。
  • Socket.getOutputStream() 不会返回空值。
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 2016-10-04
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多