Проблемы с обновлением Java-апплета

У меня есть Java-апплет (JApplet). Этот апплет использует JComponent (PanelAux) для отображения значений и изображений, которые периодически меняются. Но апплет не обновляется. Что я могу сделать, чтобы обновить мой апплет?

//--------------------------------------------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);
}

Спасибо


person Community    schedule 22.12.2008    source источник


Ответы (3)


Вы на самом деле вызываете метод run() в любом месте запуска потока, который его использует?

Кроме того: вы определенно не хотите добавлять новые компоненты в свой метод paint()! Это крики о проблемах!

person Joachim Sauer    schedule 22.12.2008
comment
Или измените размер и установите минимальный и максимальный размер. - person Tom Hawtin - tackline; 22.12.2008

В качестве общего совета см. статью Рисование в AWT и Swing. как вы должны обрабатывать перерисовку в AWT или Swing.

Поскольку вы упомянули, что используете JApplet, раздел "Painting в Swing" здесь будет актуально.

В частности, в Swing вместо перегрузки метода paint(Graphics g) следует использовать метод paintComponent(Graphics g) с вызовом метода paintComponent суперкласса. Цитата из раздела "Методы рисования":

Программы Swing должны переопределять paintComponent() вместо переопределения paint().

Это связано с тем, что сам метод paint разбит на три отдельных метода, переопределение самого метода paint означает, что он предотвратит вызовы paintComponent, paintBorder и paintChildren текущего класса и его классов-предков.

Кроме того, для вызова метода run() ваш JApplet должен реализовывать Runnable, а также иметь новый Thread, вызываемый где-то внутри вашего апплета. (Возможно, в методах init или start.)

Изменить:

Также следует отметить, что метод paintComponent будет вызываться каждый раз, когда необходимо обновить экран. Метод paintComponent будет вызываться несколько раз, поэтому, как указывает saua, он не будет Не очень хорошая идея создавать экземпляры новых объектов внутри самого метода paintComponent.

Кроме того, похоже, что дизайн должен иметь отдельный поток (поскольку апплет, похоже, реализует интерфейс Runnable, что следует из наличия метода run), обновление состояния JComponent может происходить в самом методе run. , с вызовом метода repaint при необходимости.

person coobird    schedule 22.12.2008

Вы не должны переопределять краску (Graphics g).

Есть ли исключения ошибок в консоли апплета?

person Dennis C    schedule 22.12.2008