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