Java 小程序游戏无法在 Mac 上运行,尽管它可以在 PC 上运行

发布于 2024-10-12 00:13:35 字数 1449 浏览 3 评论 0原文

我制作了一个基于 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(){}
}

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

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

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

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

I made a game that is based in a jpanel. When I add the jpanel to a jframe, it works fine on both pc's and macs.

here is the class where I add the jpanel to the 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);
   }
}

However, when I add this jpanel to a japplet, it still works perfectly on pc's, but not on macs. In the eclipse applet tester, the first screen paints, but it doesn't accept keyboard input to start the game. In any browser/html page though, the game doesn't seem to load at all, and when I open the java console of chrome I see no errors.

here is the class where I add the jpanel to the 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(){}
}

I would appreciate any help that could be offered, and I'm willing to provide more information if necessary. I could even provide the other classes of the game, but there very long and messy, and I'd rather not unless necessary.

The applet version of the game can be found here at gamejolt.com, if you feel like testing it out. If you have a pc, it should work fine, but with a mac it won't.

** edit **
here you can download the .jar file of all the classes and resources. Feel free to use the files to test out your solution yourself if you want... Otherwise, Ill have access to a mac on Tuesday and I will test all solutions then.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

忆梦 2024-10-19 00:13:35

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

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

This is just a SWAG, but since Swing threading issues can often cause pernicious, unpredictable and hard to detect errors, what if you create your applet in a thread-safe manner? i.e.,

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()
}
晨与橙与城 2024-10-19 00:13:35

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

setFocusable(false);

The JApplet is stealing the focus from the Board. To prevent it, add the following to the end of your init() method:

setFocusable(false);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文