gpt4 book ai didi

Java SwingUtilities.invokeLater

转载 作者:行者123 更新时间:2023-11-30 05:57:51 25 4
gpt4 key购买 nike

.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
try{
ta.append("Searching Initiated at: "+datetime()+"\n");
gui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
task.execute();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
});
//Enable the next stage in the YD process and disable the previously executed functions
clusAn.setEnabled(true);
open.setEnabled(false);
statCl.setEnabled(false);
}catch (Exception IOE){
}
}
});

您好,我设计的这个应用程序的最后阶段有点痛苦。

基本上,当用户单击按钮时,我希望光标变为“等待”版本,然后一旦后台进程(task.execute)完成,光标就会恢复正常。

task.execute 不在同一个类中,因此我不能直接调用“gui.setCursor”,因为它无法将 GUI 识别为变量。

不知道该怎么做,所以任何建议都会很好

谢谢:D

最佳答案

修改任务的类,以便它将您的 GUI 作为构造函数参数。这样,当任务完成时,它可以调用 setCursor 方法。

您应该使用 SwingWorker 来完成这种事情。

编辑:

任务代码如下:

public class MySwingWorker extends SwingWorker<Void, Void> {

/**
* The frame which must have the default cursor set
* at the end of the background task
*/
private JFrame gui;

public MySwingWorker(JFrame gui) {
this.gui = gui;
}

// ...

@Override
protected void done() {
// the done method is called in the EDT.
// No need for SwingUtilities.invokeLater here
gui.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}

关于Java SwingUtilities.invokeLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5091835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com