当前位置: 首页 > 知识库问答 >
问题:

无法同时运行两个语音和一个线程

景书
2023-03-14

我试图制作一个时钟,如果

如何同时运行警告语音和时钟,使时钟在播放警告语音()时不会停止?

语音代码:

private void warningVoice() {
    System.setProperty("freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
    vm = VoiceManager.getInstance();
    voice = vm.getVoice(SayWhat);
    voice.setStyle("robotic");
    voice.setVolume(200);
    voice.allocate();
    String writing; 
    writing = "You Have" + lblMinute.getText() + "Minutes Left";
    try {
        voice.speak(writing);
    }
    catch (Exception ex) {
    }
}

时钟代码:

private void showTime() {
    timer = new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            second--;
            second_format = String.format("%02d", second);
            minute_format = String.format("%02d", minute);

            lblSecond.setText(String.valueOf(second_format));

            if (second == -1) {
                second = 59;
                minute--;
                second_format = String.format("%02d", second);
                minute_format = String.format("%02d", minute);
                lblSecond.setText(String.valueOf(second_format));
                lblMinute.setText(String.valueOf(minute_format));
             
               /*This is the problem line*/
                if (minute <= 10) {
                    warningVoice();
                }
                
                if (minute == 0) {
                    timer.stop();
                    
                    second = 60;
                    minute = 25;
                }
            }
        }
    });
    timer.start();
}

共有1个答案

公孙英飙
2023-03-14

您应该研究util Timer类和timertask,然后可以通过以下方式大大简化代码:

private void warningVoice(long millisLeft) {
    //obviously replace this with your voice code
    System.out.println("You have " + TimeUnit.MILLISECONDS.toMinutes(millisLeft) + " minutes left");
}

public static void main(String[] args) throws Exception {
    Timer timer = new Timer();
    long taskTimeInMillis = TimeUnit.MINUTES.toMillis(25);
    final long warningTimeInMillis = TimeUnit.MINUTES.toMillis(10);
    long sendWarning = taskTimeInMillis - warningTimeInMillis;

    TimerTask warningTask = new TimerTask() {
        public void run() {
            warningVoice(warningTimeInMillis);
        }
    };

    timer.schedule(warningTask, sendWarning);
}
 类似资料:
  • 问题内容: 因此,我的目标是让函数启动自己的线程,以便可以并行运行,而不必等待上一个线程完成。问题在于,它似乎不是多线程的(意味着一个线程在另一个线程开始之前就完成了)。 我也有该函数的内部,但似乎启动的线程的标识与从其运行python脚本的主线程相同。我认为我的方法不正确。 问题答案: 这是常见错误,容易出错。 只需在主线程中一次执行您的函数,然后将(我想为您函数的返回值)作为函数传递给线程,这

  • 我写了一个启动两个线程的代码片段;一个线程打印所有奇数,而另一个线程打印所有偶数。我使用了内在锁和线程通信命令的组合来实现两个线程的正确交叉。这是我的代码, 以下是我的问题: > 奇数线程在printOdd()函数中执行,而偶数线程在print偶数()函数中执行。我对两个线程都使用一个内在锁;我不明白两个线程怎么能同时存在于各自的同步块中,因为使用了相同的锁。 我从代码中删除了线程通信语句(通知,

  • 本文向大家介绍Java实现的两个线程同时运行案例,包括了Java实现的两个线程同时运行案例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的两个线程同时运行。分享给大家供大家参考,具体如下: 运行结果: 更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作

  • 我有一个情况,我需要启动两个线程一个接一个。我尝试了以下代码片段,在这里我可以启动Thread12,但不能启动Thread2。我怎样才能开始两个......?如何启动两个线程一个接一个...? 代码片段

  • 问题内容: 我已经研究了很多关于Java线程的教程,但是找不到答案。 我的问题是:如何同时运行两个独立的线程? 我的情况是:我有两个任务; 保存一些数据到数据库 在移动设备上发送推送通知。 由于这两个任务是独立的,因此我想同时执行它们。 我尝试使用具有两个线程的线程池,但是问题是数据库任务很快完成,但是发送推送通知需要一些时间。 因此,当一个任务完成而另一个任务仍未完成时,它将引发异常。 我的代码