Java Applet刷新问题

时间:2008-12-22 15:55:54

标签: java applet refresh

我有一个Java Applet(JApplet)。此Applet使用JComponent(PanelAux)来显示定期更改的值和图像。但是applet并没有刷新自己。我该怎么做才能刷新我的applet?

//--------------------------------------------RUN

public void run()
    while (true) {
        try {
            myThread.sleep(1000);
        } 
        catch (InterruptedException e){
        }    
        repaint();
    }
}
//--------------------------------------------PAINT
public void paint(Graphics g)
{     

    dim  = new Dimension(image.getWidth(this)+50,image.getHeight(this)+50);
    this.resize(dim);
    this.setMaximumSize(dim);
    this.setMinimumSize(dim);

    PanelAux panel = new PanelAux(image);   //JComponent

    add(panel);

    super.paint(g);
}

谢谢

3 个答案:

答案 0 :(得分:4)

你是否真的在启动使用它的Thread的任何地方调用run()方法?

另外:您绝对不想在paint()方法中添加新组件!那是为了问题而尖叫!

答案 1 :(得分:3)

作为一般提示,Painting in AWT and Swing文章介绍了如何处理AWT或Swing中的重新绘制。

由于您提到您使用的是JApplet,因此“Painting in Swing”部分将在此处发布相关内容。

具体来说,使用Swing,而不是重载paint(Graphics g)方法,应该使用paintComponent(Graphics g)方法,而是调用超类“paintComponent方法。引自“Paint Methods”部分:

  

Swing程序应该覆盖paintComponent()而不是覆盖   paint()

这是因为paint方法本身被分解为三个单独的方法,覆盖paint方法本身意味着它将阻止调用paintComponentpaintBorder和当前班级及其祖先班级的paintChildren

此外,为了调用run()方法,您的JApplet应该实现Runnable,并且还会从您的applet中的某个位置调用新的Thread。 (可能在initstart方法中。)

修改

还应该注意,只要屏幕需要刷新,就会调用paintComponent方法。 paintComponent方法将被多次调用,因此saua points out,在paintComponent方法本身中实例化新对象不是一个好主意。

此外,似乎设计是有一个单独的线程(因为applet似乎正在实现Runnable接口,正如run方法的存在所暗示的那样),更新JComponent方法可以在run方法本身中进行,如有必要,可以调用repaint方法。

答案 2 :(得分:1)

你不应该覆盖绘画(图形g)。

applet控制台中是否有任何错误异常抛出?