2015-05-31 2 views
2

Я работаю над этой штукой для класса, и у меня возникли проблемы с Jlists. Я думал, что, наконец, понял, как обновить их с помощью моделей данных списка, но это все еще не работает.Jlist and NullPointerException

Пожалуйста, помогите.

класса вызывает у меня неприятности: класс

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.util.*; 
import java.lang.*; 

public class ClubDriverWindow extends JPanel implements ActionListener{ 
    private ArrayList playerList; 
    private DefaultListModel playerListModel; 

    private String[] secondPlayerItems = new String[1]; 
    private String[] firstPlayerItems = new String[1]; 
    private String[] players1Items = new String[1]; 
    private String[] players2Items = new String[1]; 
    private String[] retirePlayerItems = new String[1]; 
    private String[] jcomp12Items = new String[1]; 
    private String[] restorePlayerItems = new String[1]; 

    private JTextArea players; 
    private JComboBox secondPlayer; 
    private JComboBox firstPlayer; 
    private JButton player1Win; 
    private JButton player2wins; 
    private JButton draw; 
    private JButton exit; 
    private JComboBox players1; 
    private JComboBox players2; 
    private JTextArea jcomp10; 
    private JComboBox retirePlayer; 
    private JList jcomp12; 
    private JComboBox restorePlayer; 
    private JButton retireButton; 
    private JButton restoreButton; 
    private JTextArea jcomp16; 
    private JTextField addPlayer; 
    private JButton addButton; 

    public ClubDriverWindow() { 
     playerList = new ArrayList<Player>(); 
     Player starter = new Player ("Starter"); 
     playerList.add(starter); 
     playerList.add(starter); 
     playerList.add(starter); 
     playerList.add(starter); 
     playerList.add(starter); 
     playerListModel = new DefaultListModel<String>(); 

     updatePlayers(); 

     //construct components 
     players = new JTextArea (5, 5); 
     secondPlayer = new JComboBox (secondPlayerItems); 
     secondPlayer.addActionListener(this); 
     secondPlayer.setActionCommand("secondPlayerComboBox"); 
     firstPlayer = new JComboBox (firstPlayerItems); 
     player1Win = new JButton ("Win"); 
     player2wins = new JButton ("Win"); 
     draw = new JButton ("Draw"); 
     exit = new JButton ("Exit"); 
     exit.addActionListener(this);; 
     exit.setActionCommand("exit"); 
     players1 = new JComboBox (players1Items); 
     players2 = new JComboBox (players2Items); 
     jcomp10 = new JTextArea (5, 5); 
     retirePlayer = new JComboBox (retirePlayerItems); 
     jcomp12 = new JList (playerListModel); 
     restorePlayer = new JComboBox (restorePlayerItems); 
     retireButton = new JButton ("Retire"); 
     restoreButton = new JButton ("Restore"); 
     jcomp16 = new JTextArea (5, 5); 
     addPlayer = new JTextField (5); 
     addButton = new JButton ("Add Player"); 
     addButton.addActionListener(this); 
     addButton.setActionCommand("addPlayer"); 

     //set components properties 
     players.setToolTipText ("This is a leaderboard of players"); 
     secondPlayer.setToolTipText ("Choose a Player"); 
     firstPlayer.setToolTipText ("Choose a player"); 
     player1Win.setToolTipText ("Player 1 wins"); 
     player2wins.setToolTipText ("Player2 Wins"); 
     draw.setToolTipText ("No victor"); 
     exit.setToolTipText ("Help, I am trapped in a JButton!"); 
     players1.setToolTipText ("Choose a Player"); 
     players2.setToolTipText ("Choose a Player"); 
     retirePlayer.setToolTipText ("CHoose a Player"); 
     restorePlayer.setToolTipText ("Choose a player"); 
     retireButton.setToolTipText ("Set a player aside (for now)"); 
     restoreButton.setToolTipText ("Click here to bring a player back"); 
     addButton.setToolTipText ("Click here to add a new player"); 

     //adjust size and set layout 
     setPreferredSize (new Dimension (784, 508)); 
     setLayout (null); 

     //add components 
     add (players); 
     add (secondPlayer); 
     add (firstPlayer); 
     add (player1Win); 
     add (player2wins); 
     add (draw); 
     add (exit); 
     add (players1); 
     add (players2); 
     add (jcomp10); 
     add (retirePlayer); 
     add (jcomp12); 
     add (restorePlayer); 
     add (retireButton); 
     add (restoreButton); 
     add (jcomp16); 
     add (addPlayer); 
     add (addButton); 

     //set component bounds (only needed by Absolute Positioning) 
     players.setBounds (40, 40, 300, 300); 
     secondPlayer.setBounds (-170, 295, 100, 75); 
     firstPlayer.setBounds (-185, 355, 100, 75); 
     player1Win.setBounds (45, 405, 100, 25); 
     player2wins.setBounds (215, 405, 100, 25); 
     draw.setBounds (135, 445, 100, 25); 
     exit.setBounds (675, 5, 100, 25); 
     players1.setBounds (45, 365, 100, 25); 
     players2.setBounds (215, 365, 100, 25); 
     jcomp10.setBounds (380, 0, 2, 600); 
     retirePlayer.setBounds (415, 60, 100, 25); 
     jcomp12.setBounds (-150, 345, 100, 75); 
     restorePlayer.setBounds (415, 110, 100, 25); 
     retireButton.setBounds (595, 60, 100, 25); 
     restoreButton.setBounds (595, 110, 100, 25); 
     jcomp16.setBounds (-150, 300, 100, 75); 
     addPlayer.setBounds (415, 165, 100, 25); 
     addButton.setBounds (595, 165, 100, 25); 
    } 

    public static void main (String[] args) { 
     JFrame frame = new JFrame ("MyPanel"); 
     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add (new ClubDriverWindow()); 
     frame.pack(); 
     frame.setVisible (true); 
    } 

    public void wonGame(Player winner, Player loser){ 
     double wRating = winner.getRating(); 
     double lRating = loser.getRating(); 
     double pointModifier = (lRating/wRating); 
     wRating += ((pointModifier*10)+0.5); 
     lRating -= ((pointModifier*10)-0.5); 
     winner.setRating(wRating); 
     loser.setRating(lRating); 
     winner.setWins(winner.getWins() + 1); 
     loser.setLosses(winner.getLosses() + 1); 
    } 

    public void drawGame(Player player1, Player player2){ 
     double p1Rating = player1.getRating(); 
     double p2Rating = player2.getRating(); 
     double p1modifier = ((p1Rating-p2Rating)/p1Rating); 
     double p2modifier = ((p2Rating-p1Rating)/p2Rating); 
     p1Rating += ((p1modifier*-5)); 
     p2Rating += ((p2modifier*-5)); 
     player1.setRating(p1Rating); 
     player2.setRating(p2Rating); 
     player1.setDraws(player1.getDraws() + 1); 
     player2.setDraws(player2.getDraws() + 1); 
    } 

    public void actionPerformed(ActionEvent e){ 
     if (e.getActionCommand().equals("secondPlayerComboBox")){ 
     } 
     else if (e.getActionCommand().equals("exit")){ 
      System.exit(0); 
     } 
     else if (e.getActionCommand().equals("addPlayer")){ 
      addNewPlayer(); 
     } 
    } 

    public void addNewPlayer(){ 

    } 

    public void updatePlayers(){ 
     int size = playerList.size(); 
     playerListModel.clear(); 
     for (int j = 0; (j < (size-1)); j++){ 
      playerListModel.add(j,((Player)playerList.get(j)).getName()); 
     } 
     jcomp12.setModel(playerListModel); 
    } 
} 

Связанные игрока:

public class Player 
{ 
    //private Record playerRecord 
    private double rating; 
    private final String ID = ""; 
    private int ranking; 
    public String name; 
    private int losses; 
    private int wins; 
    private int draws; 

    public Player(String name){ 
     rating = 1000.0; 
     ranking = 0; 
     name = name; 
     losses = 0; 
     wins = 0; 
     draws = 0; 
    } 

    int getTotalGames(){ 
     int t = (wins+draws+losses); 
     return t; 
    } 

    float getWinLossRatio(){ 
     float r = (wins/losses); 
     return r; 
    } 

    int getWins(){ 
     return wins; 
    } 

    int getLosses(){ 
     return losses; 
    } 

    int getDraws(){ 
     return draws; 
    } 

    double getRating(){ 
     return rating; 
    } 

    String getID(){ 
     return ID ; 
    } 

    double getRanking(){ 
     return ranking; 
    } 

    String getName(){ 
     return name; 
    } 

    void setWins(int newWins){ 
     wins = newWins; 
    } 

    void setLosses(int newLosses){ 
     losses = newLosses; 
    } 

    void setDraws(int newDraws){ 
     draws = newDraws; 
    } 

    void setRating(double newRating){ 
     rating = newRating; 
    } 

    void setName(String newName){ 
     name = newName; 
    } 
} 

Ошибка:

java.lang.NullPointerException 
    at ClubDriverWindow.updatePlayers(ClubDriverWindow.java:194) 
    at ClubDriverWindow.<init>(ClubDriverWindow.java:52) 
    at ClubDriverWindow.main(ClubDriverWindow.java:144) 

P Помощь в аренде, Спасибо.

+0

Запустите это через отладчик .. это будет очень легко увидеть проблему. В любой IDE есть один. –

+0

Я скомпилировал его, и он компилируется отлично и имеет только ошибку при запуске. Я использую BlueJ, который, на мой взгляд, страшный IDE, и я не могу найти кнопку отладки на нем ... Я все еще смотрю – Darokrithia

+0

Вы присваиваете значение имени самому себе в классе Player «name = name; ", поэтому оно равно null, это одна проблема. – MadProgrammer

ответ

5

Может быть, вы должны изменить

private ArrayList playerList; 
private DefaultListModel playerListModel; 

в

private ArrayList<Player> playerList; 
private DefaultListModel<String> playerListModel; 

И для этой части,

Player starter = new Player ("Starter"); 
playerList.add(starter); 
playerList.add(starter); 
playerList.add(starter); 
playerList.add(starter); 
playerList.add(starter); 

Если вы хотите 5 различных Players, вам нужно будет создать их по один, например

Player starter = null; 
for(int i = 0; i < 5; i++) { 
    starter = new Player("Starter" + i); 
    playerList.add(starter); 
} 


Хорошо, это где NullPointerException часть ответа.

Для вашего NullPointerException, вам нужно позвонить updatePlayers(); после того, как инициализируется jcomp12 ..

jcomp12 = new JList (playerListModel); 
// .... 
updatePlayers(); 

или jcomp12 будет аннулирована внутри метода updatePlayers()!

+0

Я думаю, вы только что исправили это, спасибо вам, так много. Я работаю над этим последние 6 часов. Теперь я просто чувствую себя идиотом ... Серьёзно, спасибо, спасибо! – Darokrithia

+1

Никаких проблем, я не ошибаюсь. Я знаю, как это выглядит. :) – Gosu

Смежные вопросы