Java applet游戏在Mac上不起作用,即使它可以在PC上运行

时间:2011-01-16 18:21:42

标签: java macos applet jpanel

我做了一个基于jpanel的游戏。当我将jpanel添加到jframe时,它在pc和mac上都能正常工作。

这是我将jpanel添加到jframe的类:

import javax.swing.JFrame;

public class Start{
   public static void main(String[] args){

      JFrame f = new JFrame("Rocks");
      f.setSize(600,500);
      f.setResizable(false);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Board b = new Board();
      f.add(b);
      f.setVisible(true);
   }
}

然而,当我将这个jpanel添加到japplet时,它仍然可以在pc上完美运行,但不能在mac上运行。在eclipse applet测试器中,第一个屏幕绘制,但它不接受键盘输入来启动游戏。但是在任何浏览器/ html页面中,游戏似乎根本没有加载,当我打开chrome的java控制台时,我看到没有错误。

这是我将jpanel添加到japplet的类

import javax.swing.JApplet;

public class rockAppletStart extends JApplet{

   public void init(){
      Board b;
      b = new Board();
      add(b);
      b.focus();
   }
   public void start(){}
   public void stop(){}
   public void destroy(){}
}

我很感激可以提供的任何帮助,如果有必要,我愿意提供更多信息。我甚至可以提供游戏的其他类别,但是很长很乱,除非必要,否则我宁愿也不会。

如果你想测试它,可以找到游戏的applet版本here at gamejolt.com。如果你有一台电脑,它应该工作正常,但使用mac它不会。

** 修改 ** 在这里,您可以下载所有类和资源的.jar文件。如果您愿意,请随意使用这些文件自行测试您的解决方案......否则,我可以在星期二访问Mac,然后我将测试所有解决方案。

http://dl.dropbox.com/u/18832480/Rocks_Source_file.jar

2 个答案:

答案 0 :(得分:2)

这只是一个SWAG,但由于Swing线程问题通常会导致有害,不可预测和难以检测的错误,如果以线程安全的方式创建applet会怎么样?即,

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() {
   Board b;
   b = new Board();
   getContentPane().add(b);
   b.focus()
}

答案 1 :(得分:1)

JApplet正在窃取Board的焦点。要阻止它,请将以下内容添加到init()方法的末尾:

setFocusable(false);