Java Hashtable方法无法使用,要求引用参数化,如何解决?

问题遇到的现象和发生背景

如图,看教程是这样写的但是跑不出来,求指教

img

img

问题相关代码,请勿粘贴截图
Hashtable hashtable = null;
......
if(time<n1)
{            a=temp2;temp2=temp1;temp3=a; 
             hashtable.put(key+"1",message);//将指定 key 映射到此哈希表中的指定 value
             hashtable.put(key+"2",temp2);
             hashtable.put(key+"3",temp3);
             FileOutputStream out=new FileOutputStream(f);
             ObjectOutputStream object_out=new ObjectOutputStream(out);
             object_out.writeObject(hashtable);
             object_out.close();
             out.close();
          }
运行结果及报错内容

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at test2/test2.MazeWindow.(MazeWindow.java:52)
at test2/test2.MazeWindow.main(MazeWindow.java:199)

我的解答思路和尝试过的方法

“Hashtable hashtable = new Hashable;”也不行

我想要达到的结果

第一个截图只是警告,告诉你需要使用泛型类型,不是错误,错误在你 MazeWindow 类文件 52 行,检查是不是在列表没有数据的情况下获取了里面的元素

emmm有点懵,第52行是mazeFile=new File(file[0].getName());
您看一下:


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Hashtable;
import javax.swing.filechooser.*;

public class MazeWindow extends JFrame implements ActionListener{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    Maze maze;
    JMenuBar bar;//声明菜单条对象
    JMenu menuChoice,menuImage,hero;//声明菜单对象
    JMenuItem wallImage,roadImage,defaultImage,playerImage1,heroItem,heroclear;
     File mazeFile,wallImageFile,roadImageFile;
     JButton renew;//声明按钮对象
     String player="人.jpg";
     ShowRecord showRecord;   //ShowRecord类 创建一个类对象
     File 英雄榜=new File("英雄榜.txt");
     File  file[]=null;
     static String[] mazeName;
     static String currentMap;   
     Hashtable hashtable=null;  //哈希表 (英雄榜)
     @SuppressWarnings("rawtypes")
    MazeWindow(){
     wallImageFile=new File("墙.jpg");
     roadImageFile=new File("路.jpg");
     bar=new JMenuBar();//创建菜单条对象
     menuChoice=new JMenu("选择迷宫");
     File dir=new File(".");
     file=dir.listFiles(new FilenameFilter(){
    public boolean accept(File dir,String name){
      return name.endsWith("maze");
     }
  }
);
  mazeName=new String[file.length];
  for(int i=0;i< file.length;i++)
  { 
      mazeName[i]=file[i].getName().substring(0, file[i].getName().length()-5);//substring(截取的起始位置,截取的长度);
  }
  for(int i=0;i< mazeName.length;i++)
       { 
      JMenuItem item=new JMenuItem(mazeName[i]);
      item.addActionListener(this);
      menuChoice.add(item);
       }
  mazeFile=new File(file[0].getName());
  currentMap=mazeName[0];
  init();
  menuImage=new JMenu("选择墙和路的图像");
  wallImage=new JMenuItem("墙的图像");//创建菜单项对象
  roadImage=new JMenuItem("路的图像");
  playerImage1=new JMenuItem("玩家的图像");
  defaultImage=new JMenuItem("墙和路的默认图像");
  menuImage.add(wallImage);//菜单项添加到菜单上
  menuImage.add(roadImage);
  menuImage.add(playerImage1);
  menuImage.add(defaultImage);
  hero=new JMenu("英雄榜");
  heroItem=new JMenuItem("查看英雄榜");
  heroclear=new JMenuItem("清空英雄榜");
  hero.add(heroItem);
  hero.add(heroclear);
  bar.add(menuChoice);
  bar.add(menuImage);//菜单添加到菜单条上,
  bar.add(hero);
  setJMenuBar(bar);
  wallImage.addActionListener(this);//为菜单项添加监听器
  roadImage.addActionListener(this);
  playerImage1.addActionListener(this);
  defaultImage.addActionListener(this);
  heroItem.addActionListener(this);
  heroclear.addActionListener(this);
  renew=new JButton(new ImageIcon("人.jpg"));    /*为“重新开始”按钮添加监听器*/
  Font font=new Font("楷体",Font.BOLD,30);
  renew.setFont(font);
  renew.setVerticalAlignment(SwingConstants.TOP);
  renew.addActionListener(this);
  add(maze,BorderLayout.CENTER);//默认布局
  add(renew,BorderLayout.SOUTH);
  hashtable=new Hashtable();
  for(int i=0;i<file.length;i++)
    {
        hashtable.put(mazeName[i]+"1",mazeName[i]+"#"+100+"#匿名1");
      hashtable.put(mazeName[i]+"2",mazeName[i]+"#"+100+"#匿名2");
      hashtable.put(mazeName[i]+"3",mazeName[i]+"#"+100+"#匿名3");
    }
  if(!英雄榜.exists()) {//英雄榜是File类对象;  boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
      try{ 
            FileOutputStream out=new FileOutputStream(英雄榜);
            ObjectOutputStream objectOut=new ObjectOutputStream(out);
            objectOut.writeObject(hashtable); 
            objectOut.close();     //void close() 关闭流。
            out.close();     
            
       }
       catch(IOException e){}
   }
  showRecord =new ShowRecord(this,mazeName.length); 
  setVisible(true);
  setBounds(60,60,1012,890);
  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);
     maze.person.setImage(player);
     add(maze,BorderLayout.CENTER);
     add(maze.getHandleMove(),BorderLayout.NORTH);
     validate();
 }
  public void actionPerformed(ActionEvent e){
     if(e.getSource()==roadImage){//路的图象选择设置
           JFileChooser chooser=new JFileChooser();//文件对话框
           FileNameExtensionFilter filter=new FileNameExtensionFilter( "JPG&GIF Images","jpg","gif");
           chooser.setFileFilter(filter);
           int state=chooser.showOpenDialog(null);
           File file=chooser.getSelectedFile();
           if(file!=null&&state==JFileChooser.APPROVE_OPTION){
               roadImageFile=file;
               maze.setRoadImage(roadImageFile);
           }
      }
      else if(e.getSource()==wallImage){
              JFileChooser chooser=new JFileChooser();
              FileNameExtensionFilter filter=new FileNameExtensionFilter("JPG&GIF Images","jpg","gif");
              chooser.setFileFilter(filter);
              int state=chooser.showOpenDialog(null);
              File file=chooser.getSelectedFile();
              if(file!=null&&state==JFileChooser.APPROVE_OPTION){
                  wallImageFile=file;
                  maze.setWallImage(wallImageFile);
              }
      }   
      else if(e.getSource()==playerImage1)
        {
             JFileChooser chooser=new JFileChooser();
             FileNameExtensionFilter filter=new FileNameExtensionFilter("JPG&GIF Images","jpg","gif");
             chooser.setFileFilter(filter);
             int state=chooser.showOpenDialog(null);
             File file=chooser.getSelectedFile();
             if(file!=null&&state==JFileChooser.APPROVE_OPTION){
                 player=file.getName();
                 maze.person.setImage(player);
             }
        }
      else if(e.getSource()==defaultImage){
           wallImageFile=new File("墙.jpg");
           roadImageFile=new File("路.jpg");
           maze.setWallImage(wallImageFile);
           maze.setRoadImage(roadImageFile);
       }
       else if(e.getSource()==renew){//重新开始
            init();
       }
       else if(e.getSource()==heroItem)   //点击英雄榜
       { 
         showRecord.setMazeName(mazeName);
         showRecord.readAndShow(hashtable);                  
         showRecord.setVisible(true);
       }
      else if(e.getSource()==heroclear){           //英雄榜的设置               
          File f=new File("英雄榜.txt");
          f.delete();                          
          JFrame t=new JFrame("提示!");       
          t.setFont(new Font("楷体",Font.BOLD,30));
          t.setSize(300,215);
          t.setLocationRelativeTo(null);
          JPanel pan=new JPanel();
          t.setContentPane(pan);
          BorderLayout bLayout=new BorderLayout(20,20);
          pan.setLayout(bLayout);
          JLabel leb=new JLabel("英雄榜已清空,请重新载入游戏。");
          pan.add(leb,BorderLayout.CENTER);
          t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          t.setVisible(true);
      }
      else{
               JMenuItem item=(JMenuItem)e.getSource(); 
               mazeFile=new File(item.getText()+".maze");
               currentMap=item.getText();
               maze.getHandleMove().setMap(currentMap);
               init();  
           }
   }
   public static void main(String args[]){