我做了一个基于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,然后我将测试所有解决方案。
答案 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);