在定时器中设置Text的内容导致程序崩溃

red-fly 2021-07-03 14:12:30

我是新手,用 DevEco Studio创建一个普通手机项目,根据教程,修改xml添加了一个Text标签,然后在主程序页面 MainAbilitySlice 中,声明这个Text的变量:

private Text m_resultText;

在OnStart()中初始化:

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);


        m_txtFrame = (Text)findComponentById(ResourceTable.Id_txtTime);
        startTimer();
    }

其中的 Id_txtTime 是这个Text标签的ID,后面的startTimer()实现设置功能:

    private void startTimer(){
        m_txtFrame.setText("time ability startTimer 1");    // 这一行成功
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                updateTime();
            }
        }, 5000, 1000);

        /*
        m_txtFrame.setText("time ability startTimer 2");
         */
    }

    private void updateTime()
    {
        m_txtFrame.setText("time ability updateTime 1");
        /*
        m_tmCounter++;
        String tmStrVal = Integer.toString(m_tmCounter);
        m_txtFrame.setText(tmStrVal);
         */
    }

我的目的是启动一个定时器,每一秒刷新一次用来显示一个计数器,在startTimer()中,设置标签的内容是成功的,如果障蔽了updateTime()中的内容,程序可以正常运行,但如果像上面那样,在updateTime()中也设置Text的内容,结果程序崩溃。我用的是远程模拟器运行的。

看看是哪里不对吗?

 

 

...全文
822 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zare戏言 2021-08-30
  • 打赏
  • 举报
回复

主线程中无法操作UI线程
你在timertask的方法里用
getUITaskDispatcher().asyncDispatch(new Runnable() { //更新UI
@Override
public void run() {
m_txtFrame.setText(“text”);
}
});

red-fly 2021-07-29
  • 打赏
  • 举报
回复

我大致知道原因了,我把它改成线程,在线程中设置的时候,try...catch 到异常,错误原因是非UI线程更新界面。但是我找不到UI线程,不知道该如何修改

NorZ 2021-07-12
  • 打赏
  • 举报
回复

看看崩溃的log显示呗

red-fly 2021-07-12
  • 举报
回复
@NorZ 没有啥有用的信息: 19:36 Executing tasks: [:entry:assembleDebug] in project Q:\exp\mobile\harmony\HelloHap 19:36 Gradle build finished in 395 ms 就这两行,下面没有了
NorZ 2021-07-13
  • 举报
回复
@red-fly 这个是IDE的输出吧,你得看手机 logcat 的,不知道鸿蒙有没有改 log 系统,应该 adb logcat 还是能用的吧

5,336

社区成员

发帖
与我相关
我的任务
社区描述
HarmonyOS是一款“面向未来”、面向全场景的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
分布式学习 企业社区
社区管理员
  • HarmonyOS技术社区
  • Edice
  • BaoWei
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧