Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的应用程序会终止?_Java_Android - Fatal编程技术网

Java 为什么我的应用程序会终止?

Java 为什么我的应用程序会终止?,java,android,Java,Android,我正在编写一个简单的服务器客户端代码来交换消息,但当我尝试运行客户端时,我的应用程序终止。以下是我的客户端代码: public class Client extends AppCompatActivity { public void SMessage() throws IOException { EditText ip = (EditText) findViewById(R.id.ip); String ipadd, edttxt, output;

我正在编写一个简单的服务器客户端代码来交换消息,但当我尝试运行客户端时,我的应用程序终止。以下是我的客户端代码:

public class Client extends AppCompatActivity {

    public void SMessage() throws IOException {


        EditText ip = (EditText) findViewById(R.id.ip);
        String ipadd, edttxt, output;
        PrintStream ps = null;
        Intent i;
        Scanner sc = null;
        ipadd = ip.getText().toString();
        Socket s = null;
        s = new Socket(ipadd,1234);
        i = new Intent(getApplicationContext(), new_activity.class);
        startActivity(i);
        ScrollView Rl = (ScrollView) findViewById(R.id.scrollView);
        sc = new Scanner(s.getInputStream());
        EditText et = (EditText) findViewById(R.id.message_txt);
        edttxt = et.getText().toString();
        ps = new PrintStream(s.getOutputStream());
        ps.println(edttxt);
        TextView tv1 = new TextView(this);
        tv1.setText(edttxt);
        tv1.setLayoutParams(new ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            tv1.setBackground(getDrawable(R.drawable.ic_action_msg));

        }
        tv1.setGravity(View.FOCUS_LEFT);
        Rl.addView(tv1);

        output = sc.nextLine();
        if (output.equals("END")) {
            s.close();
            return;
        }
        TextView tv2 = new TextView(this);
        tv2.setText(output);
        tv2.setLayoutParams(new ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            tv2.setBackground(getDrawable(R.drawable.ic_action_msg));

        }
        tv2.setGravity(View.FOCUS_RIGHT);
        Rl.addView(tv2);


    }

}
应用程序终止时记录:

 E/AndroidRuntime: FATAL EXCEPTION: Thread-4
                  Process: com.example.devanshi.testapp, PID: 2325
                  java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                      at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120)
                      at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:151)
                      at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31)
                      at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55)
                      at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:33)
                      at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:33)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
                      at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
                      at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
                      at com.example.devanshi.testapp.Client.SMessage(Client.java:27)
                      at com.example.devanshi.testapp.MainActivity$2.run(MainActivity.java:60)
我想知道我哪里出了问题,如何解决。
提前感谢您的回复。:)

首先,您应该将布局设置为活动,以便可以绑定视图。像这样

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
}

第二,我真的很困惑,您想在SMessage()方法中做什么。我认为您应该对应用程序逻辑、启动活动和活动生命周期进行一些研究

我建议您使用服务在客户端和服务器之间进行通信。它将在后台运行,但您可以通过它与服务器通信。如果你开始一项新的活动,它将停止你当前的活动并将其放在后台。您当前的活动将无法从新活动访问。您不能同时运行两个活动。所以,使用服务来处理客户机-服务器通信,并根据通过服务从服务器收到的响应来更改您的客户机视图。最好不要通过创建新实例(new Client())来调用客户端活动。活动应仅使用startActivity(intent)启动我不理解原因?实际上我有一个名为new Activity的活动,服务器和客户端将在其中响应,因此要实现客户端类,我不应该调用客户端类吗?intent将如何帮助我解决这个问题?是的,客户端正在扩展活动,如果您自己创建一个活动实例,那么该活动的窗口将不会被创建,因此您不能使用findViewById方法,该方法查询不可用的窗口,并导致应用程序崩溃好的……现在我明白了(y)。。。谢谢你的帮助:)
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
}