
java 问题求解,运行一下代码时,出现错误.这是什么情况,求高手指点,本人小菜一个
publicclassMazeWindowextendsJFrameimplementsActionListener{Mazemaze;JMenuBarbar;JMenu...
public class MazeWindow extends JFrame implements ActionListener{
Maze maze;
JMenuBar bar;
JMenu menuChoice,menuImage;
JMenuItem wallImage,roadImage,defaultImage;
File mazeFile,wallImageFile,roadImageFile;
JButton renew;
MazeWindow(){
wallImageFile=new File("wall.jpg");
roadImageFile=new File("road.jpg");
bar=new JMenuBar();
menuChoice=new JMenu("选择迷宫");
File dir=new File(".");
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
for(int i=0;i<file.length;i++)
{ JMenuItem item=new JMenuItem(file[i].getName());
item.addActionListener(this);
menuChoice.add(item);
}
mazeFile=new File(file[0].getName());
init();
menuImage=new JMenu("选择墙和路的图像(JPG,GIF)");
wallImage=new JMenuItem("墙的图像");
roadImage=new JMenuItem("路的图像");
defaultImage=new JMenuItem("墙和路的默认图像");
menuImage.add(wallImage);
menuImage.add(roadImage);
menuImage.add(defaultImage);
bar.add(menuChoice);
bar.add(menuImage);
setJMenuBar(bar);
wallImage.addActionListener(this);
roadImage.addActionListener(this);
defaultImage.addActionListener(this);
renew=new JButton("重新开始");
renew.addActionListener(this);
add(maze,BorderLayout.CENTER);
add(renew,BorderLayout.SOUTH);
setVisible(true);
setBounds(60,60,510,480);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
if(maze!=null){
remove(maze);
remove(maze.getHandleMove());
}
maze=new Maze();
maze.setWallImage(wallImageFile);
maze.setRoadImage(roadImageFile);
maze.setMazeFile(mazeFile);
add(maze,BorderLayout.CENTER);
add(maze.getHandleMove(),BorderLayout.NORTH);
validate();
}
public void actionPerformed(ActionEvent e){
.......
}
public static void main(String args[]){
new MazeWindow();
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at chapter5.MazeWindow.<init>(MazeWindow.java:30)
at chapter5.MazeWindow.main(MazeWindow.java:108) 展开
Maze maze;
JMenuBar bar;
JMenu menuChoice,menuImage;
JMenuItem wallImage,roadImage,defaultImage;
File mazeFile,wallImageFile,roadImageFile;
JButton renew;
MazeWindow(){
wallImageFile=new File("wall.jpg");
roadImageFile=new File("road.jpg");
bar=new JMenuBar();
menuChoice=new JMenu("选择迷宫");
File dir=new File(".");
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
for(int i=0;i<file.length;i++)
{ JMenuItem item=new JMenuItem(file[i].getName());
item.addActionListener(this);
menuChoice.add(item);
}
mazeFile=new File(file[0].getName());
init();
menuImage=new JMenu("选择墙和路的图像(JPG,GIF)");
wallImage=new JMenuItem("墙的图像");
roadImage=new JMenuItem("路的图像");
defaultImage=new JMenuItem("墙和路的默认图像");
menuImage.add(wallImage);
menuImage.add(roadImage);
menuImage.add(defaultImage);
bar.add(menuChoice);
bar.add(menuImage);
setJMenuBar(bar);
wallImage.addActionListener(this);
roadImage.addActionListener(this);
defaultImage.addActionListener(this);
renew=new JButton("重新开始");
renew.addActionListener(this);
add(maze,BorderLayout.CENTER);
add(renew,BorderLayout.SOUTH);
setVisible(true);
setBounds(60,60,510,480);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
if(maze!=null){
remove(maze);
remove(maze.getHandleMove());
}
maze=new Maze();
maze.setWallImage(wallImageFile);
maze.setRoadImage(roadImageFile);
maze.setMazeFile(mazeFile);
add(maze,BorderLayout.CENTER);
add(maze.getHandleMove(),BorderLayout.NORTH);
validate();
}
public void actionPerformed(ActionEvent e){
.......
}
public static void main(String args[]){
new MazeWindow();
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at chapter5.MazeWindow.<init>(MazeWindow.java:30)
at chapter5.MazeWindow.main(MazeWindow.java:108) 展开
3个回答
展开全部
当前目录下,没有maze文件,所以
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
这句执行后,file.length=0;
紧跟着下面一句 for语句也没有执行,那么mazeFile=new File(file[0].getName());
自然就越界了,
添加以maze结尾的文件就行了,或者mazeFile=new File(file[0].getName());前添加if判断语句吧
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
这句执行后,file.length=0;
紧跟着下面一句 for语句也没有执行,那么mazeFile=new File(file[0].getName());
自然就越界了,
添加以maze结尾的文件就行了,或者mazeFile=new File(file[0].getName());前添加if判断语句吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组越界
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
仔细看看这里 是不是全过滤掉了
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze");
}
});
仔细看看这里 是不是全过滤掉了
追问
不懂什么意思?你告诉我怎么改,我试试吧
追答
File dir=new File(".");
你这里的‘.’什么意思 这不是文件路径啊?
还有在可能出异常的地方要做判断比如数组集合在调用属性和方法前 先判断是否为null再判断下长度是否大于0 一般这样就可以避免空指针和越界的异常了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
mazeFile=new File(file[0].getName());
改为
if(file.length>0)
mazeFile=new File(file[0].getName());
改为
if(file.length>0)
mazeFile=new File(file[0].getName());
追问
那个我也不懂,我照书上敲的代码,一字不差,明天上课我去问下老师。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询