gpt4 book ai didi

java - 如何在每次遍历 for 循环时显示更新的 GUI(使用 Swingworker?)

转载 作者:行者123 更新时间:2023-12-01 13:17:50 24 4
gpt4 key购买 nike

我想在每次进入 for 循环时更新我的​​ GUI,当我手动更新它时我可以更新我的 GUI,但在循环中它只显示最后一次更新。我听说过并读过有关 SwingWorker 的内容,但说实话我不太了解它,而且这些示例与我需要做的不同。

这是我的循环:

for(int i = 0; i < 3; i++){
actionRoll();

}

这是更新我的 GUI 的方法:

public static void actionRoll() {

String uitkomst, dice1, dice2;
int isHonderd, isMexico;

// making instance of generator
Generator generator = new Generator();

//get info from generator
uitkomst = generator.getResults();
isHonderd = generator.getIfHunderd();
isMexico = generator.getIfMexico();

//split the result
String[] parts = uitkomst.split("-");
dice1 = parts[0];
dice2 = parts[1];

//setLeft Dice
ImageIcon image = new ImageIcon("img/diceSurface/diceSurface0"+dice1+".png");
((IconPanel) pnDiceLeft).setImage(image);

//setRightDice
ImageIcon image1 = new ImageIcon("img/diceSurface/diceSurface0"+dice2+".png");
((IconPanel) pnDiceRight).setImage(image1);

pnMainPanel.updateUI();
}

现在它只显示第三次,也就是最后一次循环,如何解决这个问题?我考虑过 thread.sleep() 但它不起作用..

提前致谢!

最佳答案

假设您正在某个监听器/操作处理程序中执行循环,从而在更新 ui 的事件调度线程中执行循环。这将导致 ui 更新停止,直到执行循环,因此您只能看到最后一次迭代。

正如您所说,使用 SwingWorker 应该有所帮助,因为循环将由不同的线程执行。

示例:

class ActionRollWorker extends SwingWorker<Void, String> {
public StringdoInBackground() {
for(int i = 0; i < 3; i++){
// making instance of generator
Generator generator = new Generator();

//get info from generator
String uitkomst = generator.getResults();
int isHonderd = generator.getIfHunderd();
int isMexico = generator.getIfMexico();

publish(uitkomst);
}
return null;
}

protected void process( List<String> chunks )
{
for( String uitkomst : chunks )
{
String[] parts = uitkomst.split("-");
String dice1 = parts[0];
String dice2 = parts[1];

//setLeft Dice
ImageIcon image = new ImageIcon("img/diceSurface/diceSurface0"+dice1+".png");
((IconPanel) pnDiceLeft).setImage(image);

//setRightDice
ImageIcon image1 = new ImageIcon("img/diceSurface/diceSurface0"+dice2+".png");
((IconPanel) pnDiceRight).setImage(image1);
}
}

protected void done() {
//nothing
}
}

这样调用它:

new ActionRollWorker().execute();

请注意,pnDiceLeft 等可能必须传递给工作人员,或者工作人员需要是内部类或匿名类才能访问这些变量,具体取决于它们的定义方式和位置.

另请注意,这是未经测试的代码,可能会缺少一些内容,但它应该可以帮助您入门。

关于java - 如何在每次遍历 for 循环时显示更新的 GUI(使用 Swingworker?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323082/

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