【发布时间】:2013-12-31 13:25:52
【问题描述】:
我刚刚将我制作的 Java 游戏导出到 Runnable JAR。
游戏有一个打开屏幕(一个名为OpeningScreen 的类扩展了JPanel)。当您按下 ENTER 时,它应该从开始屏幕转到游戏本身(创建一个新的 Board 实例并将其添加到 JPanel。)
它在 Eclipse 中运行良好。
在具有main() 的类中创建OpeningScreen 的实例,命名为Starter。
导出时,我将 Starter 类设置为“启动配置”,并将“库处理”设置为“提取所需的库到生成的 JAR”。
导出后,我得到一个窗口说它导出时出现编译错误,但没有告诉我具体是哪些错误。
从生成的 JAR 启动程序时,会显示启动屏幕,但按 ENTER 不会启动游戏,尽管它在 Eclipse 中可以运行。
这是OpeningScreen的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class OpeningScreen extends JPanel implements KeyListener{
private static final long serialVersionUID = 1L;
public OpeningScreen(){
setFocusable(true);
setVisible(true);
addKeyListener(this);
}
public void paint(Graphics g){
super.paint(g);
setBackground(Color.BLACK);
Graphics2D g2d = (Graphics2D) g;
// A lot of drawing Strings.
}
public void startGame(){
JFrame frame = new JFrame("Pong Battle");
frame.setSize(500,500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Board board = new Board();
frame.add(board);
frame.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_ENTER)startGame();
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
}
编辑:Starter 类:
import javax.swing.*;
import java.awt.*;
public class Starter extends JFrame {
public Starter(){
setSize(500,500);
setResizable(false);
setTitle("Pong Battle");
setDefaultCloseOperation(EXIT_ON_CLOSE);
OpeningScreen openingS = new OpeningScreen();
add(openingS);
setVisible(true);
}
public static void main(String[]args){
Starter starter = new Starter();
}
}
可能是什么问题?谢谢
【问题讨论】:
-
1) 对于 Swing,通常在基于 AWT 的较低级别
KeyListener上使用键绑定。有关如何使用它们的详细信息,请参阅How to Use Key Bindings。 2) 对于 Swing,它是paintComponent(Graphics)而不是paint(..)3) 问题是面板既不能聚焦也没有焦点。 4) 为了尽快获得更好的帮助,请发布SSCCE。 5) 这些同样的问题一天会出现一两次。在询问之前,您真的会搜索群组吗? -
你的意思是面板既不能聚焦也没有焦点?我调用了 setFocusable(true)。
-
哦,我的错。再说一次,这次要大声一点 如需尽快获得更好的帮助,请发帖 SSCCE。
-
当然,但是既然你已经在这里了,你能帮我解决这个问题吗?
-
你能在这里发布一些真正血腥的东西吗? 由于缺少课程,垃圾收集没有。