执行被困在按钮内

Ren*_*ani 2 java swing button execution

我有一个在按钮内部调用的方法,它几乎运行无限循环.运行此方法时,我无法访问其他按钮.

在运行此方法时,如何释放界面以访问其他按钮?

//methods inside the button
this.setCrawlingParameters();
webcrawler = MasterCrawler.getInstance();
webcrawler.resumeCrawling(); //<-- the infinite loop method
Run Code Online (Sandbox Code Playgroud)

hvg*_*des 7

你需要使用SwingWorker

Swing的工作方式是它有一个主线程,即管理UI的事件调度线程(EDT).在Swing文档中,您将看到建议永远不要在EDT中长时间运行任务,因为,由于它管理UI,如果您执行大量计算,UI将会冻结.这正是你在做的事情.

因此,您需要让您的按钮调用SwingWorker,以便在另一个线程中完成硬件.注意不要从SwingWorker修改UI元素; 所有UI代码都需要在EDT中执行.

如果单击SwingWorker的链接,您将看到:

不应在Event Dispatch Thread上运行耗时的任务.否则应用程序将无响应.应仅在Event Dispatch Thread上访问Swing组件

以及有关如何使用SwingWorker的示例的链接.