【发布时间】:2015-07-05 01:15:07
【问题描述】:
我制作了一个简单的 Java 游戏,它由 2 个类(使用 JFrame)组成。我试图将它导出到一个 Runnable jar,但由于某种原因,当我尝试运行它时它永远无法工作。谢谢!
这是我的代码:
主类
RussianRoulette game = new RussianRoulette();
game.setVisible(true);
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setSize(220, 200);
game.setResizable(false);
}
}
其他类
int lives = 5;
JTextField livesDisplay;
JButton gunButton;
ImageIcon gunCold;
ImageIcon gunActive;
JOptionPane endPane = new JOptionPane();
int endProgram;
int clicked = 0;
JTextField display;
public RussianRoulette() {
super("Russian Roulette");
Font font = new Font("Western", 20, 20);
gunCold = new ImageIcon(getClass().getResource("guncold.gif"));
gunActive = new ImageIcon(getClass().getResource("gunactive.gif"));
JPanel buttonPanel = new JPanel();
JPanel livesPanel = new JPanel();
JPanel displayPanel = new JPanel();
display = new JTextField(" Click Gun To Play!", 15);
livesDisplay = new JTextField("Lives: " + lives, 8);
livesDisplay.setEditable(false);
livesDisplay.setFont(font);
livesDisplay.setBackground(Color.BLACK);
livesDisplay.setForeground(Color.WHITE);
livesPanel.add(livesDisplay);
livesPanel.setBackground(Color.BLACK);
displayPanel.add(display);
displayPanel.setBackground(Color.BLACK);
display.setFont(font);
display.setEditable(false);
display.setBackground(Color.BLACK);
display.setForeground(Color.WHITE);
LayoutManager overlay = new OverlayLayout(buttonPanel);
buttonPanel.setLayout(overlay);
buttonPanel.setBackground(Color.BLACK);
gunButton = new JButton(gunCold);
gunButton.setToolTipText("Click To Pull Trigger");
gunButton.setAlignmentX(0.4f);
gunButton.setAlignmentY(0.0f);
buttonPanel.add(gunButton);
add(buttonPanel, BorderLayout.CENTER);
add(livesPanel, BorderLayout.NORTH);
add(displayPanel, BorderLayout.SOUTH);
gunButton.addActionListener(new ActionListener() {
@SuppressWarnings("static-access")
public void actionPerformed(ActionEvent event) {
Random r = new Random();
int rand = r.nextInt(6);
clicked++;
switch (rand) {
case 0:
display.setText(" Bang! You lost a life.");
lives--;
livesDisplay.setText("Lives: " + lives);
break;
case 1:
display.setText(" You're alive!");
break;
case 2:
display.setText(" You're alive!");
break;
case 3:
display.setText(" You're alive!");
break;
case 4:
display.setText(" You're alive!");
break;
case 5:
display.setText(" You're alive!");
break;
}
Timer imageSwitch = new Timer(984, new TimerListener());
imageSwitch.setRepeats(false);
if (rand == 0) {
imageSwitch.start();
gunButton.setIcon(gunActive);
} else {
gunButton.setIcon(gunCold);
}
if (lives == 0) {
JFrame end = new JFrame();
endPane = new JOptionPane();
end.add(endPane);
endProgram = endPane.showOptionDialog(null, "You survived "
+ clicked + " trigger pulls!", "Game Over",
endPane.OK_CANCEL_OPTION,
endPane.INFORMATION_MESSAGE, null, null, null);
if (endProgram == endPane.OK_OPTION) {
System.exit(0);
} else if (endProgram == endPane.CANCEL_OPTION) {
System.exit(0);
} else if (endProgram == endPane.CLOSED_OPTION) {
System.exit(0);
}
}
}
});
}
private class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
gunButton.setIcon(gunCold);
}
{
if (lives == 0) {
display.setText(" Bang! You're dead.");
}
}
}
}
【问题讨论】:
-
你设置主类了吗?双击它会发生什么?什么都没有?
-
@FastSnail 我导出了主类和子类,当我双击它时,几秒钟后我收到一条错误消息“无法启动 Java jar 文件”。跨度>
-
@Tom 我刚刚尝试过,但没有成功。它做了一件奇怪的事情,每隔一段时间,枪按钮就会变白并缩小到它的三分之一大小
-
你能从控制台运行你的应用程序吗?只需打开一个控制台,使用
cd path/to/file切换到jar 文件的位置,然后运行java -jar YourJarFile.jar。我猜如果你运行它,你会得到一个NullPointerException。