2015-07-02 73 views
-3

我做了一個簡單的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."); 
     } 
    } 

} 

}

+0

您是否設置了主類?雙擊它時會發生什麼?什麼都沒有? –

+0

@FastSnail當我雙擊它時,我導出了主類和子類,幾秒鐘後,我收到一個錯誤,指出「Java jar文件無法啓動」。 –

+0

[Java Swing:無法使用getResource加載圖像](http://stackoverflow.com/q/22733881) – Tom

回答

1

我想通了。我必須將圖像的路徑設置爲包含我的照片的項目中的包。

gunCold = new ImageIcon(getClass().getClassLoader().getResource("images/guncold.gif")); 
gunActive = new ImageIcon(getClass().getClassLoader().getResource("images/gunactive.gif")); 
+0

@Tom是的,我知道。之後,我做了最後一件事,我在我的項目中創建了一個名爲「圖像」的包,並將圖像放在那裏。然後,我將圖像圖標的路徑設置爲包中的圖片。 –

+0

@Tom我做了getClass()。getClassLoader()。getResource(「images/guncold.gif」);然後,我爲另一張圖片做了同樣的事情。 –

+0

@Tom剛做完了。感謝您的幫助!我會在2小時內接受我的答案,因爲它說我必須等待。 –

相關問題