gpt4 book ai didi

java - Applet 中的 Paint() 方法内的无限循环不允许我与显示的按钮进行交互

转载 作者:行者123 更新时间:2023-12-01 10:25:16 25 4
gpt4 key购买 nike

我想做的是一个 Appled,它抛出 2 个线程,每个线程运行一个计数器,该计数器通过无限循环自行增加然后我在Applet的paint()方法中使用while(true),它连续地绘制计数器,问题是我还有2个按钮,每个按钮都旨在停止每个线程,但是paint()方法中的无限循环并没有不要让我点击它们中的任何一个,也不要关闭小程序的窗口或任何东西

这里是屏幕截图,后面是代码

顺便说一句,我确定问题是paint()循环,就好像我禁用了循环一样,我可以与按钮交互,但计数器显然没有更新,奇怪的是我将鼠标光标放在按钮上来显示它采用的形式就像您想要调整窗口大小但 imprpant 没有捕获它一样:/

/image/Gz8cf.png

公共(public)类 MainApplet 扩展 Applet 实现 ActionListener {

private static final long serialVersionUID = -2500043816999861110L;
private Font fuente;
private Button bUno, bDos;
private HiloContador hUno, hDos;

public void init() {
setBackground(Color.LIGHT_GRAY);
fuente = new Font("Verdana",Font.BOLD,26);
bUno = new Button("Parar");
bUno.addActionListener(this);
bDos = new Button("Parar");
bDos.addActionListener(this);
bUno.setSize(40,20);
add(bUno);
bDos.setSize(40,20);
add(bDos);
hUno = new HiloContador(20);
hUno.start();
hDos = new HiloContador(40);
hDos.start();

}

@SuppressWarnings({ "deprecation", "static-access" })
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(bUno)){
hUno.parar();
bUno.setLabel("1 parado");
}else if (e.getSource().equals(bDos)){
hDos.parar();
bDos.setLabel("2 parado");
}
}

public void paint(Graphics g) {
while (true){
g.clearRect(1,1,getSize().width,getSize().height); //dibuja la ventana
g.setFont(fuente);
g.drawString(hUno.getContador()+"",40,60);
g.drawString(hDos.getContador()+"",100,60);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

最佳答案

如果它对任何人有帮助,解决了删除无限循环并添加此方法

Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
repaint();}
}, 0, 1000);

关于java - Applet 中的 Paint() 方法内的无限循环不允许我与显示的按钮进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384211/

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