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线程开始之前,您就填充了数组列表,基本上是相同的想法。