我刚刚向Runnable JAR导出了一个Java游戏。
游戏有一个开放屏幕(一个名为OpeningScreen
的类,扩展了JPanel)。当你按 ENTER 时,它应该从开始屏幕进入游戏本身(创建一个新的Board
实例并将其添加到JPanel。)
它在Eclipse中运行良好。
OpeningScreen
的一个实例是在main()
的类中创建的,名为Starter
。
导出时,我将Starter类设置为“Launch configuration”,并将“Library handling”设置为“将所需的库提取到生成的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();
}
}
可能是什么问题?感谢
答案 0 :(得分:0)
您的打开屏幕需要添加到另一个容器内,然后是另一个Jframe
f.setUndecorated(true)
f.setContentPane(new OpeningPanel())
f.dispose()
答案 1 :(得分:0)
不要使用KeyListener。你应该使用Key Bindings。
请参阅Motion Using the Keyboard了解原因和工作示例。