Java 应用程序将冻结,然后屏幕仅显示状态栏。有什么建议吗?

Java 应用程序将冻结,然后屏幕仅显示状态栏。有什么建议吗?,java,android,xml,Java,Android,Xml,按下即将出现的xml表示的选项后,应用程序冻结,屏幕将变为空白(如下所示:) 另一个选项也是如此,其中xml非常相同(EditText读取另一个xml中的字符串) 此外,此xml的特定代码如下所示: package com.example.elev.myapplication2; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.But

按下即将出现的xml表示的选项后,应用程序冻结,屏幕将变为空白(如下所示:)

另一个选项也是如此,其中xml非常相同(EditText读取另一个xml中的字符串)


此外,此xml的特定代码如下所示:

package com.example.elev.myapplication2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
 import static java.lang.Integer.parseInt;



public class intervalNumClass extends Activity{
EditText itxt1,itxt2;
int i1,i2,rez;
TextView rezr;
Button CautaRnd;
Random r=new Random();

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.intervalnum_layout);

    itxt1=(EditText) findViewById(R.id.interval1txt);
    itxt2=(EditText) findViewById(R.id.interval2txt);
    CautaRnd=(Button) findViewById(R.id.button);
    rezr=(TextView) findViewById(R.id.rezultTXT);

    do {
        itxt1.getText();
    }while(itxt1.length()<=0);
    i1=Integer.valueOf(String.valueOf(itxt1));

    do {
       itxt2.getText();
    }while(itxt2.length()<=0);
    i2=Integer.valueOf(itxt2.getText().toString());


    CautaRnd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            rez = i1 + r.nextInt(i2 + i1);
            rezr.setText("Rezultat: "+rez);
            rezr.setVisibility(View.VISIBLE);
        }
    }
    );
}
}
package com.example.elev.myapplication2;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入java.util.Random;
导入静态java.lang.Integer.parseInt;
公共类intervalNumClass扩展活动{
编辑文本itxt1、itxt2;
inti1,i2,rez;
TextView-rezr;
纽扣尾;
随机r=新随机();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.intervalnum_布局);
itxt1=(EditText)findViewById(R.id.interval1Text);
itxt2=(EditText)findViewById(R.id.interval2Text);
CautaRnd=(按钮)findViewById(R.id.Button);
rezr=(TextView)findViewById(R.id.rezultTXT);
做{
itxt1.getText();

}虽然(itxt1.length()我不认为这个代码在点击一个按钮后会冻结,但我认为只要打开活动
intervalNumClass
它就会冻结,因为您的代码在
onCreate()
处陷入无限循环

看这里:

do {
        itxt1.getText();
    }while(itxt1.length()<=0);

另一个while循环也会导致同样的问题!

为什么要使用while,这在这里没有任何意义,所以请删除两个do-while块,这两个块在这里不需要,会导致这里递归循环不会根据您的条件而中断

除去

do {
        itxt1.getText();
    }while(itxt1.length()<=0);

 do {
       itxt2.getText();
    }while(itxt2.length()<=0);
do{
itxt1.getText();

}(itxt1.length()非常感谢,我甚至没有注意到,因为我认为问题出在xml上。我遇到了另一个问题。logcat返回“Invalid int:”你知道我该如何解决这个问题吗?这是真的因为我不处理异常而出现吗?@RaresUrsu你必须使用
try catch
,因为如果使用输入非数字文本或空文本,你的应用程序将崩溃,出现与你类似的异常,所以你可以通过
try catch
块来处理
i1=Integer.valueOf(itxt1.getText().toString());
do {
        itxt1.getText();
    }while(itxt1.length()<=0);

 do {
       itxt2.getText();
    }while(itxt2.length()<=0);