java.lang.nullpointerexception:尝试调用虚拟方法'void java.io.writer.write(java.lang.string)'null对象引用 12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:
在 com.end.myapplication.mainactivity $ sendingrunnable.run(mainActivity.java:124) 12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:
在Android.os.handler.handlecallback(Handler.java:751)12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:at android.os.handler.dispatchMessage(Handler.java:95)12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:at android.os.looper.loop(looper.java:154)12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:at android.app.activitythread.main(activityThread.java:6119)12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:at java.lang.reflect.method.invoke(本机方法)12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:at com.android.internal.os.zygoteinit $ methodAndargScaller.run(zygoteinit.java:886) 12-09 07:18:35.259 2419-2419/com.end.myapplication w/system.err:
在com.android.internal.os.os.zygoteinit.main(zygoteinit.java:776)
MainActivity
package com.end.myapplication;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private String html = "";
private Handler mHandler;
private Socket socket;
private BufferedReader networkReader;
private BufferedWriter networkWriter;
private String ip = "192.168.56.1"; // IP
private int port = 5516; // PORT번호
boolean check=false;
EditText et;
TextView tv;
NetworkThread thread;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.EditText01);
Button btn = (Button) findViewById(R.id.Button01);
tv = (TextView) findViewById(R.id.TextView01);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (et.getText().toString() != null || !et.getText().toString().equals("")) {
check=true;
}
}
});
}
@Override
protected void onResume() {
super.onResume();
new Thread(){
@Override
public void run(){
try {
socket = new Socket(ip, port);
networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}.start();
thread = new NetworkThread(networkReader, networkWriter);
thread.start();
}
private class NetworkThread extends Thread {
BufferedReader br;
BufferedWriter bw;
Handler mHandler;
SendingRunnable sendingRunnable;
private NetworkThread(BufferedReader br, BufferedWriter bw){
this.br = br;
this.bw = bw;
mHandler = new Handler();
sendingRunnable = new SendingRunnable(bw);
}
@Override
public void run() {
super.run();
boolean isError = false;
String result = "";
String error = "";
try{
this.bw.write("CONNECTEDn");
this.bw.flush();
}catch (Exception e){
e.printStackTrace();
}
while (true){
try{
if (check){
mHandler.post(sendingRunnable);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
private class SendingRunnable implements Runnable {
BufferedWriter bw;
private SendingRunnable(BufferedWriter bw){
this.bw = bw;
}
@Override
public void run() {
String formula = et.getText().toString();
try{
bw.write(formula+"n");
bw.flush();
et.setText("");
}catch (Exception e){e.printStackTrace();}
}
}
}
您正在同时启动两个线程,其中第二个线程中的第二个线程中的资源是由第一个线程初始化的。
解决方案:从第一线程启动第二个线程
或
移动插座连接和读取器,NetworkThread
线程中的作者代码(不需要两个线程)
线程使用情况可能会有种族条件。尝试删除以前的Thread
。
更改
new Thread(){
@Override
public void run(){
try {
socket = new Socket(ip, port);
networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}.start();
to
try {
socket = new Socket(ip, port);
networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e1) {
throw new AssertionError(e1);
}