【发布时间】:2026-01-26 04:55:01
【问题描述】:
我有一个包含框架和 JMenu 的主类,还有一个从 JPanel 扩展的游戏类。从jMenu中单击一个选项时如何创建新游戏?
目前,我有这个
class Application {
private static Game game;
private static TheFrame frame;
private static JMenuBar menu;
public Application(){
frame = new TheFrame();
menu = new JMenuBar();
JMenu file = new JMenu("File");
menu.add(file);
frame.setJMenuBar(menu);
JMenuItem newGame = new JMenuItem("New Game");
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newGame();
}
});
file.add(newGame);
JMenuItem scores = new JMenuItem("Show Scores");
scores.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Score();
}
});
file.add(scores);
JMenuItem exit = new JMenuItem("Exit!");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
file.add(exit);
}
private void newGame(){
// frame.getContentPane().removeAll();
frame.getContentPane().setBackground(Color.pink);
game = new Game();
frame.addGameToCanvas(game);
game.runMenu();
}
/**
* Main method
* @param args
*/
public static void main(String args[]) {
Application app = new Application();
}
}
但是当我点击新游戏时,框架变黑并且不显示任何内容。我之前在命令行上,一切正常,但是当我尝试使用菜单执行此操作时不起作用。有什么建议吗?
编辑
frame.addGametoCanva() 的代码。它的作用是将游戏对象添加到画布上。 公共无效addGameToCanvas(游戏g){ 画布 = g; 添加(画布,BorderLayout.CENTER); 无效(); 证实(); 重绘(); }
是的,游戏对象有一个有限循环,用于用户输入(来自控制台)
【问题讨论】:
-
我怀疑这是在EDT 上运行长时间运行的任务时出现的问题,但没有更多信息无法确定。
game.runMenu和frame.addGameToCanvas有什么作用?是否进入了一个不会在合理时间内终止的 while 循环? -
在原始帖子中添加了更多信息。 Game.runMenu() 它的作用是运行游戏菜单以选择用户想要执行的操作。在命令行中