代码之家  ›  专栏  ›  技术社区  ›  pie154

javagui,需要暂停一个方法而不冻结GUI

  •  3
  • pie154  · 技术社区  · 16 年前

    我知道这个问题是由主线程上的sleep或wait调用引起的,解决这个问题的方法是将这个方法放入一个单独的线程中,然后使该线程休眠。但是代码是一团乱麻,没有时间去整理它,把它分成不同的线程,我想知道是否还有其他方法可以做到这一点?即使这不是使用gui的最干净或最常见的实践。我只需要暂停一下方法。

    5 回复  |  直到 16 年前
        1
  •  8
  •   kgiannakakis    16 年前

    如果不创建一个单独的线程,就无法执行此操作。用Java创建线程很容易。唯一需要注意的是,您只能通过主线程触摸UI。因此,您需要使用 SwingUtilities.invokeLater() .

        2
  •  1
  •   pajton    16 年前

    不能在事件线程上休眠,也不能导致GUI冻结。然而,在Swing中,事件线程是在幕后创建和管理的—您是主线程(源于主线程的线程) main() 方法)是 事件线程。

    所以,你可以安全地睡在你的主线程。

        3
  •  0
  •   Daniel Bleisteiner    16 年前

    对代码使用单独的线程是唯一的解决方案。如果Swing线程启动的每个操作会阻塞GUI,则必须将其委托给单独的线程。

        4
  •  0
  •   Kartik Sharma    12 年前

    我为java编写了一个超级简单的延迟函数,它不会让GUI冻结。每次我用它的时候它都会起作用,我想它也会对你起作用。

         void Delay(Long ms){
    
           Long dietime = System.currentTimeMillis()+ms;
           while(System.currentTimeMillis()<dietime){
               //do nothing
           }
       }
    

    例如:要将线程延迟5毫秒,请使用delay(5L)

        5
  •  -6
  •   Abdul Rahman Rodrigo    13 年前

    除非有人能证明我错了,你显然永远不会暂停你的主要线程,因为这将锁定你的应用程序。但是,一旦您定义了另一个线程并用 sleep() 这也会锁定应用程序,因为线程是在主应用程序的子类中定义的,因此也是主线程。

    所以把一个很长的故事放到床上,暂停一个用户定义的线程,几乎和调用 Thread.sleep() 在你的应用程序中的任何地方 暂停整个应用程序。

    推荐文章