我正在做一个游戏,我需要每3秒更新一次JProgressBar。为此,我使用while循环。问题是我的程序由于while循环而冻结(我在其他问题中读过它,它们没有帮助我解决此问题)。我不知道该怎么解决。这是我的代码:
public static void city (String[] args){
//loading some of the saveData (not all of it is made yet)
try{
File saveDataFile = new File("save.dat");
Scanner saveDataSc = new Scanner(saveDataFile);
int power = saveDataSc.nextInt();
int people = saveDataSc.nextInt();
int food = saveDataSc.nextInt();
int wood = saveDataSc.nextInt();
int iron = saveDataSc.nextInt();
int stone = saveDataSc.nextInt();
saveDataSc.close();
} catch (FileNotFoundException ex){}
frame.remove(introImage4);
frame.remove(startingScreen);
frame.add(background1);
//background properties
background1.setLayout(null);
//sideBar properties
sideBar.setLayout(null);
sideBar.setBounds(700,0,200,600);
//button properties
AltarListB.setBounds(50,20,100,100);
InventortyB.setBounds(25,515,150,20);
ArmyB.setBounds(25,545,150,20);
MessagesB.setBounds(25,485,150,20);
MissionsB.setBounds(25,455,150,20);
MapB.setBounds(117,170,65,30);
FieldB.setBounds(18,170,65,30);
TownB.setBounds(68,135,65,30);
//image properties
underline1.setBounds(0,205,200,31);
underline2.setBounds(0,426,200,24);
//prograssbar properties
powerProg.setMinimum(0);
peopleProg.setMinimum(0);
woodProg.setMinimum(0);
foodProg.setMinimum(0);
ironProg.setMinimum(0);
stoneProg.setMinimum(0);
powerProg.setMaximum(500);
peopleProg.setMaximum(500);
woodProg.setMaximum(500);
foodProg.setMaximum(500);
ironProg.setMaximum(500);
stoneProg.setMaximum(500);
powerProg.setStringPainted(true);
peopleProg.setStringPainted(true);
woodProg.setStringPainted(true);
foodProg.setStringPainted(true);
ironProg.setStringPainted(true);
stoneProg.setStringPainted(true);
powerProg.setValue(power);
peopleProg.setValue(people);
woodProg.setValue(wood);
foodProg.setValue(food);
ironProg.setValue(iron);
stoneProg.setValue(stone);
powerProg.setString("Power: " + power + "/" + "maxPower");
peopleProg.setString("People: " + people + "/" + "maxPeople");
woodProg.setString("Wood: " + wood + "/" + "maxWood");
foodProg.setString("Food: " + food + "/" + "maxFood");
ironProg.setString("Iron: " + iron + "/" + "maxIron");
stoneProg.setString("Stone: " + stone + "/" + "maxStone");
powerProg.setBounds(14,241,170,20);
peopleProg.setBounds(14,273,170,20);
woodProg.setBounds(14,305,170,20);
foodProg.setBounds(14,337,170,20);
ironProg.setBounds(14,369,170,20);
stoneProg.setBounds(14,401,170,20);
//adding stuff
sideBar.add(AltarListB);
sideBar.add(InventortyB);
sideBar.add(ArmyB);
sideBar.add(MessagesB);
sideBar.add(MissionsB);
sideBar.add(MapB);
sideBar.add(FieldB);
sideBar.add(TownB);
sideBar.add(underline1);
sideBar.add(underline2);
sideBar.add(powerProg);
sideBar.add(peopleProg);
sideBar.add(woodProg);
sideBar.add(foodProg);
sideBar.add(ironProg);
sideBar.add(stoneProg);
background1.add(sideBar);
background1.revalidate();
background1.repaint();
frame.revalidate();
frame.repaint();
resourceLoader(new String[] {"a","b","c"});
}
public static void resourceLoader (String[] args){
while(true){
try{
File saveDataProgFile = new File("save.dat");
Scanner saveDataProgSc = new Scanner(saveDataProgFile);
power = saveDataProgSc.nextInt();
people = saveDataProgSc.nextInt();
food = saveDataProgSc.nextInt();
wood = saveDataProgSc.nextInt();
iron = saveDataProgSc.nextInt();
stone = saveDataProgSc.nextInt();
saveDataProgSc.close();
powerProg.setValue(power);
peopleProg.setValue(people);
woodProg.setValue(wood);
foodProg.setValue(food);
ironProg.setValue(iron);
stoneProg.setValue(stone);
background1.revalidate();
background1.repaint();
frame.revalidate();
frame.repaint();
saveDataProgSc.reset();
try{
Thread.sleep(3000);
} catch(InterruptedException e){
Thread.currentThread().interrupt();
}
} catch (FileNotFoundException ex){}
}
}
你能帮我吗?
您应该在自己的线程中运行循环:
new Thread( new Runnable() {
@Override
public void run()
{
resourceLoader (null);
}}).start();
顺便说一句:如果您没有在方法中使用“ String [] args”,则没有理由在方法中声明它。
问题内容: http://i.stack.imgur.com/XvHm5.png 当我单击“打开”按钮时,它将开始在JTextField上发送垃圾邮件1。而是冻结整个GUI,包括关闭按钮。我正在使用while循环,当您再次单击jButton时,它将停止。因为jButton被冻结,所以我无法停止该程序。我已经读过线程和多线程将有所帮助,但是所有教程都太复杂了,以至于我无法理解。他们说将循环和GUI放
我试图创建GUI Api。首先,我只在控制台中使用打印信息构建python脚本。 所以我想将应用程序重建为具有接口的应用程序。我决定用PyQt5 我在运行时遇到了循环问题。应用程序在运行时冻结 我准备了一个简短的脚本来模拟这个问题。主程序看起来不一样 在主程序中,在检查GraphQL中批量请求的状态时使用:
我有一个带有“开始”按钮和进度条的小型GUI测试。期望的行为是: 单击开始 Progressbar振荡5秒 进度条停止 观察到的行为是“开始”按钮冻结5秒钟,然后显示进度条(无振荡)。 以下是我目前的代码: 根据Bryan Oakley提供的信息,我知道我需要使用线程。我试着创建一个线程,但我猜,由于线程是从主线程中开始的,所以没有帮助。 我的想法是将逻辑部分放在一个不同的类中,并从该类中实例化G
问题内容: 我有一个带有“开始”按钮和进度条的小型GUI测试。所需的行为是: 点击开始 进度条振荡5秒钟 进度栏停止 观察到的行为是“开始”按钮冻结5秒钟,然后显示进度条(无振荡)。 到目前为止,这是我的代码: 根据Bryan Oakley 在此提供的信息,我了解我需要使用线程。我尝试创建一个线程,但是我猜测由于该线程是从主线程中启动的,因此没有帮助。 我有想法放置在不同的类中的逻辑部分,以及从该
for while loop break 与 continue label for for 语句用于遍历一个迭代器。 for var in iterator { code } Rust 迭代器返回一系列的元素,每个元素是循环中的一次重复。然后它的值与 var 绑定,它在循环体中有效。每当循环体执行完后,我们从迭代器中取出下一个值,然后我们再重复一遍。当迭代器中不再有值时,for 循环结束。
问题内容: 我正在用cardLayout更改“视图”(此类有一个变量)。当用户单击新游戏按钮时,会发生以下情况: 游戏的循环方法和类标题: 我在用画 实际上,它没有画任何东西。当我不调用方法(因此它仅绘制一次)时,所有图像均正确绘制。但是当我调用方法时,窗口中什么也没有发生。(即使关闭按钮也不起作用。) 如何解决?(当我在游戏课程中创建游戏时,一切正常,但是现在我想拥有更多视图,因此我需要在其他课