Почему переменная, объявленная за пределами paint (), не распознается внутри paint ()?

1

Почему 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();

}
}

обновить: отредактировал код

  • 2
    Ну твой список пуст. Возможно, вы можете показать нам, как вы пытаетесь заполнить его. Кроме того, Thread.sleep(50);...repaint(); не делай этого внутри краски !!! Используйте таймер. docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
  • 0
    Можете ли вы предоставить содержимое файла decripted.txt ?
Показать ещё 4 комментария
Теги:
arraylist
swing

1 ответ

0

Paint вызывается в UI Thread несколько раз, прежде чем что-либо добавит в arraylist. Вы можете просто проверить, не является ли оно нулевым и иметь в списке один элемент внутри него.

  • 0
    ок лол. спасибо за ответ, я только что запустил его без ошибок. я просто поместил код чтения файлов в main() и сделал все переменные кода static .
  • 0
    @yologaming :-) Таким образом, вы заполнили список массивов до запуска потока пользовательского интерфейса, в основном та же идея.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню