java:为什么当我尝试重新启动线程时我的应用程序崩溃了?

基莫:

因此,我正在编写一个可以远程控制另一台设备的灯光的应用程序。现在,我想有一个计时器,只要打开灯,它就会运行,而当我再次关闭它们时,它会停止运行。

现在,第一次可以很好地工作:这意味着当我第一次打开灯时,计时器开始运转,当我关闭灯时,它会停止。但是,当我再次尝试执行此操作时,应用程序崩溃了。任何人都知道问题可能在哪里吗?

这是我的代码:


 //thread for the timer it's in the onCreate method
        t = new Thread()
        {
            @Override
            public void run(){

                while(!(t.isInterrupted())){

                    try {
                        Thread.sleep(1000);  //1000ms = 1 sec

                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                runningtime++;
                                runningTime.setText("Running since: " + String.valueOf(runningtime) + "seconds" );
                            }
                        });

                    } catch (InterruptedException e) {
                        t.interrupt();
                    }

                }
            }
        };
    }

//the buttons and the button listeners 

    final Button buttonOn = findViewById(R.id.lightOn);
        buttonOn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Code here executes on main thread after user presses button
                turnLightOn();
                //timer-thread gets started
                t.start();
                test.setText("Status: ON");
            }
        });


        final Button buttonOff = findViewById(R.id.lightOff);
        buttonOff.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Code here executes on main thread after user presses button
                turnLightOff();
                //timer thread gets interrupted
                t.interrupt();
                test.setText("Status: OFF");
            }
        });

迈克dg:

您根本无法在Java中重新启动线程

来自https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html上的Java API文档

一次启动一个线程永远是不合法的。特别是,线程一旦完成执行就可能不会重新启动。

基本上,您将要使用上面显示的相同逻辑来重新创建此线程。将其放入返回Thread的新方法中,然后从onClick调用该新方法以填充t可能很有意义。但是请当心有人敲击单击按钮,这可能会导致奇怪的行为。

 //thread for the timer it's in the onCreate method
public Thread makeNewThread() {
        return new Thread()
        {
            @Override
            public void run(){

                while(!(t.isInterrupted())){

                    try {
                        Thread.sleep(1000);  //1000ms = 1 sec

                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                runningtime++;
                                runningTime.setText("Running since: " + String.valueOf(runningtime) + "seconds" );
                            }
                        });

                    } catch (InterruptedException e) {
                        t.interrupt();
                    }

                }
            }
        };
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么当我尝试显示我的 ip usig Inet 时我的应用程序崩溃?

当我尝试重新登录时,Android应用程序崩溃

当我尝试打开蓝牙时应用程序崩溃

当我尝试调试时应用程序崩溃

当我尝试打开 Fragment 时应用程序崩溃

当我尝试设置onClickListener时,应用程序崩溃

当我们处理它时,Asp.net 应用程序在实时服务器上崩溃,在重新启动 IIS 时它再次工作

为什么当我放置回收器视图时我的应用程序崩溃?

重新启动应用程序后,为什么我的数据没有保存到CoreData?

为什么我的线程退出时我的Android应用程序崩溃?

当我更改状态时,为什么我的 React 应用程序没有重新渲染?

我的应用程序在启动时崩溃,我不确定为什么

当我从EditText中删除所有内容时,为什么应用程序崩溃?

为什么当我碰到鼠标滚轮时WPF应用程序会崩溃?

当我添加使用MediaPlayer类运行音频的方法时,为什么应用程序崩溃?

为什么当我按下按钮在表中插入值时应用程序崩溃?

为什么当我点击搜索按钮时应用程序崩溃?

为什么我可以将枚举保存到 Firestore,但是当我尝试检索它时它会导致应用程序崩溃?

当我尝试从 SQLite 数据库中删除一行时,为什么我的 android 应用程序崩溃?科特林

为什么pygame的崩溃尝试重新启动游戏时?

我的 xamarin android 应用程序在重新启动时崩溃。使用带有导航抽屉布局的片段

应用程序在重新启动活动时崩溃

当我的 Android 应用程序的启动画面打开时,应用程序崩溃

为什么我的 React Native 应用程序在启动时崩溃而没有任何错误?

为什么在新活动中启动相机意图时我的应用程序不断崩溃?

为什么我的应用程序在更改布局时崩溃?

为什么我的应用程序在执行按钮时崩溃?

为什么在调用OnBackPressed时我的应用程序崩溃了?

当我尝试向其中添加图像按钮时,我的应用程序崩溃了