Java 倒计时运行时错误
完全是新手,我尝试制作简单的android应用程序。 要倒计时睡眠时间,用三个按钮“睡眠”,“醒来”,“复位”。 当我在我的手机里运行时,它会说“不幸的是,已经停止” 我已经在调试模式下运行了它,但它也不工作 下面是我的java代码:Java 倒计时运行时错误,java,android,nullpointerexception,runtime-error,countdowntimer,Java,Android,Nullpointerexception,Runtime Error,Countdowntimer,完全是新手,我尝试制作简单的android应用程序。 要倒计时睡眠时间,用三个按钮“睡眠”,“醒来”,“复位”。 当我在我的手机里运行时,它会说“不幸的是,已经停止” 我已经在调试模式下运行了它,但它也不工作 下面是我的java代码: package com.example.android.sleepreminder; import android.annotation.SuppressLint; import android.app.Activity; import android.os.B
package com.example.android.sleepreminder;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
Button buttonSleep = (Button) findViewById(R.id.sleep);
Button buttonWoke = (Button) findViewById(R.id.woke);
Button buttonReset = (Button) findViewById(R.id.reset);
EditText text1 = (EditText) findViewById(R.id.count_down_timer);
// private static final String FORMAT = "%02d:%02d:%02d";
int second =60;
public CountDownTimer countDownTimer = new CountDownTimer(second * 10000, 1000) {
@Override
public void onTick(long millis) {
text1.setText((int)millis * 1000);
}
@SuppressLint("SetTextI18n")
@Override
public void onFinish() {
text1.setText("reset");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSleep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.start();
}});
buttonWoke.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}});
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.onFinish();
}});
}
}
这是我的XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/count_down_timer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="time" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/sleep"
style="@style/Button"
android:text="Sleep" />
<Button
android:id="@+id/woke"
style="@style/Button"
android:text="Woke" />
<Button
android:id="@+id/reset"
style="@style/Button"
android:text="Reset" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这就是我在日志中得到的错误:
11-27 01:12:16.699 16135-16135/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.sleepreminder, PID: 16135
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.sleepreminder/com.example.android.sleepreminder.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5624)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.Activity.findViewById(Activity.java:2102)
at com.example.android.sleepreminder.MainActivity.<init>(MainActivity.java:14)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1606)
at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:360)
at android.app.Instrumentation.newActivity(<Xposed>)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5624)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
11-27 01:12:16.699 16135-16135/?E/AndroidRuntime:致命异常:主
进程:com.example.android.sleepreminder,PID:16135
java.lang.RuntimeException:无法实例化activity ComponentInfo{com.example.android.SleepEmployer/com.example.android.SleepEmployer.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.android.view.Window.findViewById(int)”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
在android.app.ActivityThread.access$800(ActivityThread.java:178)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
位于android.os.Handler.dispatchMessage(Handler.java:111)
位于android.os.Looper.loop(Looper.java:194)
位于android.app.ActivityThread.main(ActivityThread.java:5624)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:959)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
位于de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.view android.view.Window.findViewById(int)”
在android.app.Activity.findviewbyd(Activity.java:2102)
在com.example.android.sleepRemembers.MainActivity上。(MainActivity.java:14)
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于java.lang.Class.newInstance(Class.java:1606)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1071)
位于de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(本机方法)
位于de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:360)
在android.app.Instrumentation.newActivity()上
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
在android.app.ActivityThread.access$800(ActivityThread.java:178)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
位于android.os.Handler.dispatchMessage(Handler.java:111)
位于android.os.Looper.loop(Looper.java:194)
位于android.app.ActivityThread.main(ActivityThread.java:5624)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:959)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
位于de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
你能告诉我我的问题的具体情况吗 您需要在
setContentView
方法之后使用findViewById
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonSleep = (Button) findViewById(R.id.sleep);
Button buttonWoke = (Button) findViewById(R.id.woke);
Button buttonReset = (Button) findViewById(R.id.reset);
EditText text1 = (EditText) findViewById(R.id.count_down_timer);
buttonSleep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.start();
}});
buttonWoke.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}});
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.onFinish();
}});
}
试试这个。在OnCreate活动中定义按钮。在
text1.setText((int)millis*1000)上出现空指针异常代码>所以它没有得到文本1。因此,在onCreate中的setContentView
之后findViewById
public class MainActivity extends Activity {
Button buttonSleep;
Button buttonWoke;
Button buttonReset;
EditText text1;
// private static final String FORMAT = "%02d:%02d:%02d";
int second =60;
public CountDownTimer countDownTimer = new CountDownTimer(second * 10000, 1000) {
@Override
public void onTick(long millis) {
text1.setText((int)millis * 1000);
}
@SuppressLint("SetTextI18n")
@Override
public void onFinish() {
text1.setText("reset");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSleep = (Button) findViewById(R.id.sleep);
buttonWoke = (Button) findViewById(R.id.woke);
buttonReset = (Button) findViewById(R.id.reset);
text1 = (EditText) findViewById(R.id.count_down_timer);
buttonSleep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.start();
}});
buttonWoke.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}});
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownTimer.onFinish();
}});
}
}
欢迎继续编码。。如果你得到了解决方案,别忘了标记为接受答案:)