我正在用java写一个游戏(一个applet),并且我有两个线程正在运行。一个线程正在主类中运行,另一个线程是一个单独的类,它绘制一个公共变量类中的图形变量,供所有其他类读取。 (主类读取图形变量并且可以绘制它(作为图像))如何从applet中的其他方法调用repaint?
我想能够从另一个类中调用主applet的repaint()方法,但我没有想法该怎么做,因为调用“Main_applet_class”.repaint()方法会导致“无法调用此静态上下文的方法”错误。帮帮我!
我正在用java写一个游戏(一个applet),并且我有两个线程正在运行。一个线程正在主类中运行,另一个线程是一个单独的类,它绘制一个公共变量类中的图形变量,供所有其他类读取。 (主类读取图形变量并且可以绘制它(作为图像))如何从applet中的其他方法调用repaint?
我想能够从另一个类中调用主applet的repaint()方法,但我没有想法该怎么做,因为调用“Main_applet_class”.repaint()方法会导致“无法调用此静态上下文的方法”错误。帮帮我!
您需要对要调用方法的对象的引用。一种方法是通过调用类中的构造函数参数将主要applet对象传递给调用类。请注意,这与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
}
}
也许我应该已经包括此代码: '公共类InternetHearts扩展的Applet实现Runnable,MouseListener的,的MouseMotionListener,KeyListener的 {// 东西... ... 主题SPThread; SPGame单人游戏=新SPGame(); //更多内容... public void start() SPThread = new Thread(singleplayer); SPThread.start(); } // 更多的东西 } 公共类SPGame实现Runnable {// 的东西,并构造 公共无效的run(){ // 我想打电话重绘这里 } }' – Evan 2011-04-21 15:14:37
乌姆是的,我希望我可以正确格式化,但我不能在评论 – Evan 2011-04-21 15:15:19
@Evan:将它添加为您的原始文章的编辑,然后发表评论指向我与@ hovercraft在开始时,所以我会知道寻找你的改变。 – 2011-04-21 15:59:31
所以你会接受还是什么? – 2011-05-02 14:15:57