Как вызвать перерисовку из другого метода в апплете? - PullRequest
1 голос
/ 19 апреля 2011

Я пишу игру (апплет) на Java, и у меня работает два потока. Один поток выполняется в главном классе, а другой представляет собой отдельный класс, рисующий графическую переменную в классе открытых переменных для всех остальных классов, которые нужно прочитать. (Основной класс читает графическую переменную и может нарисовать ее (как изображение).)

Я хотел бы иметь возможность вызывать метод repaint () для основного апплета из другого класса, но я не знаю, как это сделать, потому что вызов метода "Main_applet_class" .repaint () приводит к "" Ошибка "Вы не можете вызвать этот метод из статического контекста". Помогите!

1 Ответ

2 голосов
/ 19 апреля 2011

Вам нужна ссылка на объект, для которого вы хотите вызвать метод.Один из способов - передать основной объект апплета вызывающему классу через параметр конструктора в вызывающем классе.Обратите внимание, что это не имеет ничего общего с программированием GUI и все, что связано с базовой Java.

Например:

import javax.swing.JApplet;

public class FooApplet extends JApplet {
   public void init() {
      try {
         javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
               createGUI();
            }
         });
      } catch (Exception e) {
         System.err.println("createGUI didn't successfully complete");
      }
   }

   private void createGUI() {
      OtherClass otherClass = new OtherClass(this);

   }
}

class OtherClass {
   private FooApplet fooApplet;

   public OtherClass(FooApplet fooApplet) {
      this.fooApplet = fooApplet;  // now I can call methods on the FooApplet object
   }

   public void myMethod() {
      // ... some code here...
      fooApplet.repaint(); // now that I have a valid ref I can call repaint
   }
}
...