嘿,我只需要回答一个问题…我将如何使以下代码不冻结整个JFrame?
try { Thread.sleep(Integer.parseInt(delayField.getText()) * 1000); System.out.println("Hello!"); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); }
使用其他线程来执行此任务。如果在主UI线程中执行此操作,则它将冻结。例如,您可以执行以下操作
new Thread() { @Override public void run() { try { Thread.sleep(Integer.parseInt(delayField.getText()) * 1000); System.out.println("Hello!"); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } }.start();
更新
在对Robin和Marko提出明智建议之后,我正在用更好的解决方案来更新答案。
ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { System.out.println("Hello!"); } }; javax.swing.Timer t = new javax.swing.Timer(Integer.parseInt(delayField.getText()) * 1000, taskPerformer); t.setRepeats(false); t.start();