Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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,我正在编写一个非常基本的程序,它的目标是文本视图在按下屏幕上的按钮后显示短语“Hello”,但无法理解为什么每次我运行它时,它都会说应用程序意外停止 这是我写的程序: public class EtudeActivityActivity extends Activity{ TextView tvResponse; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedI

我正在编写一个非常基本的程序,它的目标是文本视图在按下屏幕上的按钮后显示短语“Hello”,但无法理解为什么每次我运行它时,它都会说应用程序意外停止

这是我写的程序:

public class EtudeActivityActivity extends Activity{
  TextView tvResponse;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final TextView tvResponse = (TextView)  findViewById (R.id.tvResponse);
  }


  public void updateTV(View v) {
    tvResponse.setText("Hello");
  }
}
另外,我在main.xml文件中为按钮插入了一个
android:onClick=“updateTV”


谢谢你的帮助

我怀疑您有一个名为
tvResponse
的实例变量,您没有向我们展示它-这就是
updateTV
方法将引用的内容。这与您在
onCreate
中声明的本地
tvsresponse
变量完全不同。我怀疑如果您将
onCreate
的最后一行从局部变量声明更改为
tvsresponse
变量的简单赋值,它可能会起作用。否则,如果没有为实例
tvResponse
变量赋值,则其默认值为
null
,在
updateTV

中导致
NullPointerException
我怀疑您有一个名为
tvResponse
的实例变量,您没有向我们展示它-这就是
updateTV
方法将引用的内容。这与您在
onCreate
中声明的本地
tvsresponse
变量完全不同。我怀疑如果您将
onCreate
的最后一行从局部变量声明更改为
tvsresponse
变量的简单赋值,它可能会起作用。否则,如果没有为实例
tvsresponse
变量赋值,它的默认值将为
null
,导致
updateTV
中出现
NullPointerException
,这是因为您没有设置
tvsresponse
成员变量。而是用相同的名称设置一个新的局部变量。因此,当您调用
setText()
时,您正在访问一个无效的引用

你需要改变

final TextView tvResponse = (TextView)  findViewById (R.id.tvResponse);


设置成员变量,使其在以后(调用
updateTV()
时)有一个有效的引用。

这是因为您没有设置
tvResponse
成员变量。而是用相同的名称设置一个新的局部变量。因此,当您调用
setText()
时,您正在访问一个无效的引用

你需要改变

final TextView tvResponse = (TextView)  findViewById (R.id.tvResponse);


设置成员变量,使其在以后(调用
updateTV()
时)有一个有效的引用。

非常感谢!当我在查找其id时将tvresponse定义为文本视图时,它为什么不起作用呢?因为
tvresponse
的本地定义隐藏了成员变量,所以您没有更改成员变量,因此将其保留为默认值:
null
。一旦
onCreate()
完成,
findViewById()
的结果就丢失了。这很有效,非常感谢!当我在查找其id时将tvresponse定义为文本视图时,它为什么不起作用呢?因为
tvresponse
的本地定义隐藏了成员变量,所以您没有更改成员变量,因此将其保留为默认值:
null
。一旦
onCreate()
完成,
findViewById()
的结果就会丢失。