当前位置: 首页 > 面试题库 >

有没有更好或替代的方法可以跳过/避免在Java中使用Thread.sleep(1000)?

劳昊明
2023-03-14
问题内容

我正在测试一个重载的视频,该视频在Thread.sleep(1000)之后加载;它播放第二个视频。但是一旦我一次又一次地循环播放,它就会冻结。

当我删除所有那些Thread.sleep(1000); 它完美地工作而没有冻结。

但是我需要延迟(但不要使用Thread.sleep方法),我们该怎么做?

package test;

public class Test
{
  static String what = "0";
  public static void main(String args[]) 
  {                    
    Load.video720p("/tmp/START.mp4"); // This is 8 second movie playing
    new javax.swing.Timer(8000, new ActionListener() 
    {
        public void actionPerformed(ActionEvent ae) 
        {
          if (what.equals("0") ) 
          {
            /* After 8 seconds play 0.mp4 */
            callMe();
            what = "1";
          } else {
            /* After 8 seconds play 1.mp4 */
            callMe();
            what = "0";
          }
        }
    }).start(); /* Keep on looping every 8 seconds. */
  }

  /* 8 seconds interval call me. */
  public static void callMe()
  {
      try {

           /* Try 0: Freeze/Do not play */
           Load.video720p("/tmp/" +  what + ".mp4");

           /* Try 1: Does not change films (cant run)
           new Thread(new Runnable() {
             public void run() {
            Load.video720p("/tmp/" +  what + ".mp4", EVENT_TRIGGER_TRUE);                  
         }
           });*/

           /* Try 2: Fails
           try {
         javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
               public void run() {
                    Load.video720p("/tmp/" +  what + ".mp4");
               }
         });
        } catch (Exception e) { 
            System.err.println(e);
        }*/

        /* Try 3: Failes
        try {
         java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    Load.video720p("/tmp/" +  what + ".mp4");  
                }
         });
        } catch (Exception e) { 
            System.err.println(e);
        }*/

      } catch (Exception e) {
        System.out.println(e);
      } 
    }
}

问题答案:

如果您正在调用sleep()事件处理线程,则可以,在此期间,GUI将冻结。一个更好的主意是使用SwingTimer,它将允许您在指定的延迟后触发第二个视频的播放而无需调用sleep()



 类似资料:
  • 我正在尝试用Tkinter编写我的第一个基于GUI的python程序。我已经创建了一个基本窗口,它持有菜单栏和几个选项。 其中一个选项是一个标准的“about”框。当我用 它打开消息框,但在一个新窗口中,因此现在任务栏上显示了两个窗口。有没有办法阻止它打开一个新窗口而使用主窗口代替,或者有没有更好的办法来做这件事? null null null

  • 从我的main开始,我将启动两个线程,称为producer和consumer。两者都包含循环。生产者循环是UDP服务器,因此不需要Hibernate。我的问题出在消费者方面。使用者循环将对象从链接队列中移除,并将其传递给一个函数进行进一步处理。根据研究,在循环中使用线程Hibernate不是一个好的实践,因为有时O/S在设定时间结束时不会释放。如果我删除线程Hibernate,当应用程序是理想的,

  • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

  • 我从其他答案中尝试了各种方法,但还是无法解决这个问题。我把错误的副本放在http://randy.strausses.net/blog/bug/ 多谢了。另一种选择是放弃使用Eclipse。

  • 问题内容: 该问题适用于曾经在Tomcat管理器中测试过“发现泄漏”按钮并获得如下结果的任何人: 以下Web应用程序已停止(重新加载,取消部署),但它们先前运行的类仍被加载到内存中,从而导致内存泄漏(使用探查器进行确认): / leaky-app-name 我假设这与您经常进行重新部署时经常遇到的“ Perm Gen space”错误有关。 因此,当我部署时在jconsole中看到的是加载的类从大