Java 为什么在paint()内部无法识别在外部声明的变量?

Java 为什么在paint()内部无法识别在外部声明的变量?,java,swing,arraylist,Java,Swing,Arraylist,为什么arraylist.get(0)在运行时报告错误。编译时没有错误,但运行时,它运行得非常完美,但它提供: 线程“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException中的异常:索引:0,大小:0 程序报告错误在执行arraylist.get(0)的行中。我声明了arraylistoutside paint(),它给出了上面的错误。但当我在paint()中声明它时,不会报告任何错误。但是,我想在外部声明arraylist 如何声明arrayl

为什么
arraylist.get(0)
在运行时报告错误。编译时没有错误,但运行时,它运行得非常完美,但它提供:

线程“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException中的异常:索引:0,大小:0

程序报告错误在执行
arraylist.get(0)
的行中。我声明了
arraylist
outside paint(),它给出了上面的错误。但当我在paint()中声明它时,不会报告任何错误。但是,我想在外部声明
arraylist

如何声明
arraylist
outside 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();

}
}
类游戏{
int x=0,y=250;
弦线;
字符串[]列表;
静态ArrayList ArrayList;
公共静态void main(字符串[]args){
游戏=新游戏();
game.read();
}
公共无效读取(){
arraylist=新的arraylist();
试一试{
BufferedReader br=新的BufferedReader(新的文件阅读器(“dictionary.txt”);
line=br.readLine();
列表=行。拆分(“”);

for(int i=0;i在将任何内容添加到
arraylist
之前,会在UI线程中多次调用Paint。
您可以简单地检查它是否不为null,并在其中至少列出一项。

您的列表是空的。也许您可以向我们展示您如何尝试填充它。此外,
Thread.sleep(50);…repaint()
不要在内部绘制!!!使用计时器。你能提供
decripted.txt
文件的内容吗?@atishhimpi内容不重要。它只包含用空格分隔的单词。解析时逐字获取是的,我已经尝试使用示例文件,在代码上用空格分隔内容,效果很好。Making things static不是正确的解决方案。注意,你不能在paint()方法中睡觉。你需要使用
SwingTimer
来安排重新绘制。好的,哈哈。谢谢你的回答,我刚刚让它运行了,没有错误。我只是将filereader代码放在
main()中
并使代码的所有变量
静态
@yologaming:-)这样,在UI线程开始之前,您就填充了数组列表,基本上是相同的想法。