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

时间:2016-02-13 19:13:39

标签: java loops applet paint

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

这里是代码

的屏幕截图

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

http://i.imgur.com/PJnDI4u.png

公共类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();
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

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

sed '/^$/d' | grep -f ...