【问题标题】:Java applet game does not work on Macs, even though it does work on PCsJava 小程序游戏不能在 Mac 上运行,即使它可以在 PC 上运行
【发布时间】:2011-06-10 01:55:19
【问题描述】:

我制作了一个基于 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 小程序测试器中,第一个屏幕绘制,但它不接受键盘输入来启动游戏。不过,在任何浏览器/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(){}
}

如果能提供任何帮助,我将不胜感激,如有必要,我愿意提供更多信息。我什至可以提供游戏的其他类,但那里很长而且很乱,除非必要,否则我宁愿不提供。

游戏的小程序版本可以在here at gamejolt.com找到,如果你想测试一下。如果你有一台电脑,它应该可以正常工作,但使用 mac 就不行了。

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

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

【问题讨论】:

  • 我认为您需要发布Board 的来源,以便有人诊断问题。该错误可能在focus 中(这不是JComponent 的方法,所以我认为这是您自己的实现,或者您的意思可能是requestFocus)或您的KeyListener
  • 焦点方法,实际上只是一个调用 requestFocusInWindow() 的方法,但我还是要把整个游戏的 jar 贴出来
  • .jar 的链接已添加。

标签: java macos applet jpanel


【解决方案1】:

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

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()
}

【讨论】:

  • 好的,谢谢。不幸的是,我要到本周星期二才能使用 Mac。如果你有一个 mac 并且想测试这个,我发布了所有类和资源的 jar,哈哈。否则,请在周二进行测试并回复您。
  • 现在问这个问题可能有点为时过早,如果你不能测试它,我们也不能,因为你提供的代码不足以让个人能够测试和重现你的问题。呃,好吧。干杯。编辑:啊,我看到你已经张贴了罐子。
  • 哈哈,对不起,我的错。我修复了指向包含源代码的 jar 的链接。
【解决方案2】:

JApplet 正在从Board 窃取焦点。为防止出现这种情况,请将以下内容添加到您的 init() 方法的末尾:

setFocusable(false);

【讨论】:

  • 好的。谢谢。我会在星期二测试这个并回复你,除非在那之前我可以找人为我测试。
  • 这很有效,因为游戏现在可以在 eclipse 小程序查看器中完美运行。但是,该游戏仍然无法在 Mac 上的 html 页面中运行。 Mac 是否在其浏览器中使用过时的 java 版本?
  • @Jeff:我发现在 Mac 上的 Java 偏好设置中,如果选择“在浏览器进程中运行小程序”,浏览器会忽略小程序标签中指定的 JRE 版本,并始终使用默认的 JRE . OTOH,如果您选择“在自己的进程中运行小程序”,它在 Firefox 中会变得不稳定(尽管在 Safari 和 Chrome 中很好。)我所知道的唯一可靠的解决方法是针对 Java 1.5(默认情况下很少是早期版本比这个。)
  • @Jeff:顺便说一句,您的游戏几乎可以在 Java 1.5 上运行。在 BufferedImage 构造函数中有一个例外,您可以在其中创建船舶图像的旋转版本,可以通过使用 BufferedImage(ColorModel, WritableRaster, boolean, HashTable) 构造函数来解决此问题。之后游戏似乎运行良好。
  • 好的,谢谢。我没有得到任何例外,但当时我正在努力解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2018-10-20
相关资源
最近更新 更多