【发布时间】: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