Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序游戏不能在Mac电脑上运行,即使它可以在PC电脑上运行_Java_Macos_Applet_Jpanel - Fatal编程技术网

Java小程序游戏不能在Mac电脑上运行,即使它可以在PC电脑上运行

Java小程序游戏不能在Mac电脑上运行,即使它可以在PC电脑上运行,java,macos,applet,jpanel,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.setResi

我制作了一个基于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上却不行。在EclipseApplet测试仪中,第一个屏幕绘制,但它不接受键盘输入来启动游戏。不过,在任何浏览器/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版本。如果你有一台个人电脑,它应该可以正常工作,但有了mac电脑就不行了

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


这只是一个问题,但由于Swing线程问题通常会导致有害的、不可预测的和难以检测的错误,如果以线程安全的方式创建小程序会怎么样?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()
}

JApplet
正在从
板上窃取焦点。要防止这种情况,请在
init()方法的末尾添加以下内容:

setFocusable(false);

我认为您需要发布
板的源代码,以便有人诊断问题。这个bug可能在
focus
(这不是
JComponent
的方法,所以我假设它是您自己的实现,或者您的意思是
requestFocus
)或者在您的
keylister
中。focus方法实际上只是板上调用requestFocusInWindow()的方法但是我还是要发布整个游戏的jar。jar的链接已经添加。好的,谢谢。不幸的是,我要到本周星期二才能使用mac电脑。如果你有一台mac电脑并且想测试这个,我发布了一个包含所有类和资源的jar,哈哈。否则,我会在周二进行测试并回复你。如果你不能测试这个问题,那么问这个问题可能有点为时过早,我们也不能,因为你提供的代码不足以让个人测试和再现你的问题。好吧。干杯编辑:啊,我看到你把罐子贴出来了。哈哈,对不起,是我的错。我修复了包含源代码的jar链接。ok。非常感谢。我会在星期二测试这个,然后再给你回复,除非在那之前我能找人帮我测试一下。这很有效,因为游戏现在可以在eclipse小程序查看器中完美运行。然而,这款游戏仍然不能在Mac电脑的html页面上运行。Mac的浏览器中使用的java版本是否过时?杰夫:我发现在Mac的java首选项中,如果选择“在浏览器进程中运行小程序”,浏览器会忽略小程序标记中指定的JRE版本,并始终使用默认的JRE。如果你选择“在自己的进程中运行小程序”,那么在Firefox中它会变得不稳定(尽管在Safari和Chrome中很好)。我所知道的唯一可靠的解决方法是针对Java 1.5(默认版本比这个版本早是很少见的。)@Jeff:BTW你的游戏几乎可以在Java 1.5上运行。BuffereImage构造器中存在一个例外,您可以创建船舶图像的旋转版本,可以使用
BuffereImage(ColorModel、WritableRaster、boolean、HashTable)
构造器来解决该问题。在那之后,比赛似乎进行得很顺利。好的,谢谢。我没有得到任何例外,但我会努力解决这个问题。