gpt4 book ai didi

java - JApplet显示

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

我不确定我的程序有什么问题。我认为这可能是线程的问题,即使我没有创建线程。我有三个不同的类来实现扫雷游戏。一个是用于 81 ( 9 x 9 ) 个按钮的扩展 JButton 类 MineButton。第二个是包含 MineButton 的扩展容器类 MineField。然后我有包含 MineField 对象的 Minesweeper 类。我有很多工作。现在我要做的是让 Minenewseeper 类从 MineButton 类访问静态信息。在这里,我不知道我应该怎么做。在(我相信)字段和按钮被初始化并准备好显示之后。我将 Minesweeper 对象发送到一个无限循环中,以不断更新来自 MineButton 类的信息。当我这样做时,小程序弹出但不显示其内容。并且 showStatus 显示为零。它应该是什么。感谢您的帮助。

这是扫雷类

    public class Minesweeper extends JApplet
{
MineField field;
public void init()
{
field = new MineField(9,9);
getContentPane().add(field);
setSize(field.getSize());
}

public void start()
{
// trying to fix my problem. Wondering if not ready for display
field.setNumbers();
while(!field.initialized());


while(true)
{
showStatus(MineButton.flagCount + "");
}
}
}

最佳答案

您至少可以在刷新状态之间增加一些延迟。现在你占用了整个 CPU,除了忙于等待是一种非常糟糕的做法之外, Swing 线程无法跳入并绘制你的东西。

while(true) {
showStatus(MineButton.flagCount + "");

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Str.class.getName()).log(Level.SEVERE, null, ex);
}
}

更好的解决方案是设置一个计时器,而不是 while 循环:

int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
showStatus(MineButton.flagCount + ""); // need to make sure that you can call showStatus
}
};

new javax.swing.Timer(delay, taskPerformer).start();

关于java - JApplet显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333167/

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