java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void java.io.Writer.write(java.lang.String)'



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);
}

相关内容

最新更新