Почему arraylist.get(0)
сообщает об ошибке при запуске. Я не получаю ошибку при компиляции, но когда я запускаю ее, она работает отлично, но она дает:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
и программа сообщает, что ошибка находится в строке, где arraylist.get(0)
. Я объявлял arraylist
вне paint(), и он дает ошибку выше. Но когда я объявляю его внутри paint(), сообщение об ошибке не сообщается. Тем не менее, я хочу объявить arraylist
снаружи.
Как я могу объявить arraylist
вне paint() ;?
здесь мой код ниже:
class Game{
int x=0, y=250;
String line;
String[] list;
static ArrayList<String> arraylist;
public static void main(String[] args){
Game game= new Game();
game.read();
}
public void read(){
arraylist= new ArrayList<String>();
try{
BufferedReader br = new BufferedReader(new FileReader("dictionary.txt"));
line= br.readLine();
list= line.split(" ");
for(int i=0; i<list.length ;i++)
arraylist.add(list[i]);
Collections.shuffle(arraylist);
}
catch(Exception e){}
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2= (Graphics2D)g;
Font font= new Font("Impact",Font.PLAIN,10);
g2.setFont(font);
g2.drawString(arraylist.get(0),x,y);
try{
Thread.sleep(50);
}
catch(Exception e){}
repaint();
}
}
обновить: отредактировал код
Paint вызывается в UI Thread несколько раз, прежде чем что-либо добавит в arraylist
. Вы можете просто проверить, не является ли оно нулевым и иметь в списке один элемент внутри него.
main()
и сделал все переменные кода static
.
Thread.sleep(50);...repaint();
не делай этого внутри краски !!! Используйте таймер. docs.oracle.com/javase/tutorial/uiswing/misc/timer.htmldecripted.txt
?