java - 如何从小程序中的另一个方法调用重绘?

标签 java multithreading applet repaint

我正在用java编写一个游戏(一个小程序),并且有两个线程正在运行。一个线程在主类中运行,另一个线程是一个单独的类,绘制到公共(public)变量类中的图形变量,以供所有其他类读取。 (主类读取图形变量并可以将其绘制(作为图像)。)

我希望能够从其他类调用主小程序的 repaint() 方法,但我不知道如何执行此操作,因为调用“Main_applet_class”.repaint() 方法会导致“您无法从静态上下文中调用此方法”错误。救命!

最佳答案

您需要对要调用其方法的对象的引用。一种方法是通过调用类中的构造函数参数将主小程序对象传递给调用类。请注意,这与 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
   }
}

关于java - 如何从小程序中的另一个方法调用重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717144/

相关文章:

c++ - 是否有一些用于模拟 Glib::Dispatcher 的 Boost 功能?

java - 调用 MainFrame 后如何运行 applet 代码?

java - 垃圾收集器Java应用程序无法释放POD Kubernetes中的内存。

Java - 程序在 Eclipse 中完美运行,但在导出到可运行 jar 时似乎没有执行其预期任务

java - 当另一个线程通知线程时,该线程从哪里开始执行?

java - 将静态 java 对象用于软件组件

java - Applet 中的类加载器 : Can't access files

java - 为什么我在浏览器中得到 java.lang.reflect.InitationTargetException 而在 Eclipse Applet 查看器中却没有?

java - Guice 的全局注入(inject)器

java - 在合并命令后获取主键值?