Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 Android异常,但没有可见错误_Java_Android - Fatal编程技术网

Java Android异常,但没有可见错误

Java Android异常,但没有可见错误,java,android,Java,Android,我在我的主课中运行以下代码,只是为了有一个计数器,它可以倒计时到圣诞节的天数、小时、分和秒。从我所看到的,我认为我的代码是正确的(尽管,由于它抛出了一个异常,它可能不是)。有人能看出错误是什么吗 final TextView mTextField = new TextView(this); Calendar xmas = Calendar.getInstance(); Calendar now = Calendar.getInstance(); xmas.set(20

我在我的主课中运行以下代码,只是为了有一个计数器,它可以倒计时到圣诞节的天数、小时、分和秒。从我所看到的,我认为我的代码是正确的(尽管,由于它抛出了一个异常,它可能不是)。有人能看出错误是什么吗

final TextView mTextField = new TextView(this);

    Calendar xmas = Calendar.getInstance();
    Calendar now = Calendar.getInstance();

    xmas.set(2011, 12, 25);

    long milliseconds1 = now.getTimeInMillis();
    long milliseconds2 = xmas.getTimeInMillis();
    long diff = milliseconds2 - milliseconds1;
    final long diffSeconds = diff / 1000;
    final long diffMinutes = diff / (60 * 1000);
    final long diffHours = diff / (60 * 60 * 1000);
    final long diffDays = diff / (24 * 60 * 60 * 1000);

    int delay = 1000; // delay for 1 sec.
    int period = 1000; // repeat every sec.

    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask()
        {
            public void run()
            {
                mTextField.setText("Days : " + diffDays + " Hours : "  + diffHours + " Minutes : " + diffMinutes + " Seconds : " +diffSeconds);
            }
        }, delay, period);
     setContentView(mTextField);
堆栈跟踪如下所示

   10-29 17:27:19.258: ERROR/AndroidRuntime(471): FATAL EXCEPTION: Timer-0
10-29 17:27:19.258: ERROR/AndroidRuntime(471): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.ViewRoot.checkThread(ViewRoot.java:2932)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.ViewRoot.requestLayout(ViewRoot.java:629)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.widget.TextView.checkForRelayout(TextView.java:5514)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.widget.TextView.setText(TextView.java:2724)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.widget.TextView.setText(TextView.java:2592)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at android.widget.TextView.setText(TextView.java:2567)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at com.android.sleeps.SleepstosantaActivity$1.run(SleepstosantaActivity.java:44)
10-29 17:27:19.258: ERROR/AndroidRuntime(471):     at java.util.Timer$TimerImpl.run(Timer.java:284)

第44行是mTextField.setText(“天:+diffDays+”小时:+diffHours+”分钟:+diffMinutes+”秒:+diffSeconds”)

无法与线程中的视图交互。计时器基本上是一个线程。您必须在此处将处理程序与计时器一起使用。

尝试使用处理程序而不是计时器,从日志中可以看出,问题在于您无法从timerTask更改UI

这里有一些很好的例子:

使用postDelayed可在操作之间提供延迟

你的逻辑有缺陷,应该是这样的:

diff = diff /1000;
final long diffSeconds = diff % 60;
diff = diff / 60;
final long diffMinutes = diff % 60;
...

我还没有测试过,但应该可以使用。

您可以从logcat提供异常信息吗?每当您提出异常问题时,您应该说明异常是什么。不要让我们猜测。啊,我很抱歉,仿真器只回答“应用程序myapp(process com.android.myapp)意外停止。请重试。是否存在android仿真器日志异常(或堆栈跟踪?)是的,检查logcat:当你问一个关于Android中异常的问题时,我们通常会想知道logcat中发生了什么。谢谢,正如你所说,我将它改为使用可运行线程,但我得到天:88小时:2113分钟:126780秒:7606800,你能看到我的逻辑有什么错误吗?是的,你的逻辑n确实需要一些工作!首先你需要使用模运算符。然后你需要在进行时减去每一个片段。我将为你输入一些代码。。。