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)
你需要使用SwingWorker
Swing的工作方式是它有一个主线程,即管理UI的事件调度线程(EDT).在Swing文档中,您将看到建议永远不要在EDT中长时间运行任务,因为,由于它管理UI,如果您执行大量计算,UI将会冻结.这正是你在做的事情.
因此,您需要让您的按钮调用SwingWorker,以便在另一个线程中完成硬件.注意不要从SwingWorker修改UI元素; 所有UI代码都需要在EDT中执行.
如果单击SwingWorker的链接,您将看到:
不应在Event Dispatch Thread上运行耗时的任务.否则应用程序将无响应.应仅在Event Dispatch Thread上访问Swing组件
以及有关如何使用SwingWorker的示例的链接.