버튼을 클릭 할 때 카드를 그리는 작은 코드가 있습니다. 현재 actionPerformed()를 활성화하면 다음과 같은 오류가 발생합니다. "AWT-EventQueue-0 java.lang.IndexOutOfBoundsException ..."예외가 발생했습니다. 나는 완전히 새로운이에요. 그래서 그것이 단순한 실수라면 용서해주십시오.ActionListener의 Java 호출 메소드
import java.awt.*;
import java.awt.event.*;
import java.util.*; /*Used for Random and ArrayList*/
public class AL extends Frame implements WindowListener,ActionListener {
TextField text = new TextField(20);
Button b;
private int numClicks = 0;
private static ArrayList<Card> deck=new ArrayList<Card>();
private static ArrayList<Card> playerOneDeck=new ArrayList<Card>();
private static ArrayList<Card> playerTwoDeck=new ArrayList<Card>();
public static void main(String[] args) {
AL myWindow = new AL("Well of course you know, this means WAR!");
myWindow.setSize(350,100);
myWindow.setVisible(true);
ArrayList<Card> playerTwoDeck=new ArrayList<Card>();
}//end main()
public AL(String title) {
super(title);
setLayout(new FlowLayout());
addWindowListener(this);
b = new Button("Draw");
add(b);
add(text);
b.addActionListener(this);
ArrayList<Card> deck=new ArrayList<Card>();
ArrayList<Card> playerOneDeck=new ArrayList<Card>();
deck=initializeDeck();
Collections.shuffle(deck);
}
public void actionPerformed(ActionEvent e) {
numClicks++;
Card theCard=playerOneDeck.get(0);
text.setText(theCard.name);
text.setText(theCard.name);
}
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
/*Assign names, values, and suits to all of the Card objects.*/
public static ArrayList<Card> initializeDeck() {
Card[] tempDeck=new Card[52];
ArrayList<Card> completeDeck=new ArrayList<Card>();
for (int i=0; i<tempDeck.length; i++) {
tempDeck[i]=new Card();
tempDeck[i].name="Two";
tempDeck[i].value=2;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Three";
tempDeck[i].value=3;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Four";
tempDeck[i].value=4;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Five";
tempDeck[i].value=5;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Six";
tempDeck[i].value=6;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Seven";
tempDeck[i].value=7;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Eight";
tempDeck[i].value=8;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Nine";
tempDeck[i].value=9;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Ten";
tempDeck[i].value=10;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Jack";
tempDeck[i].value=11;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Queen";
tempDeck[i].value=12;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="King";
tempDeck[i].value=13;
i++;
tempDeck[i]=new Card();
tempDeck[i].name="Ace";
tempDeck[i].value=14;
}//end FOR
/*Assign suits*/
/*keep in mind that the array is now [2], [3],..[k],[a],[2],[3],[k],[a],etc */
for (int j=0; j<tempDeck.length; j++) {
tempDeck[j].suit="Hearts";
j++;
tempDeck[j].suit="Diamonds";
j++;
tempDeck[j].suit="Spades";
j++;
tempDeck[j].suit="Clubs";
}//end FOR
for (int k=0; k<tempDeck.length;k++) {
completeDeck.add(tempDeck[k]);
}
return completeDeck;
}//end initializeDeck()
public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
} 당신은 ActionPerformed
의 첫 번째 줄에 PlayerOneDeck
에서 첫 번째 요소를 얻을려고
1) 더 빨리 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve)를 게시하십시오. 2) 코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. 3)'정적'을 사용하는 것은 보통 불필요하며, 나쁜 코드 냄새가납니다. –
스택 추적에서 예외가 발생한다고 말하는 행은 무엇입니까? – Kayaman
BTW - 왜 Swing이 아닌 AWT인가? AWT 구성 요소를 사용하여 포기해야하는 많은 이유 때문에 [AWT를 통한 스윙 엑스트라] (http://stackoverflow.com/a/6255978/418556)에서 내 대답을 참조하십시오. –