2015-12-17 111 views
-3

我想从文本文件中读取字符以在NetBeans IDE中使用扫描仪填充对象数组。所有游戏文件都在同一个文件夹src/wizard/game中。以下是我GamePanel.java类的一切,但相关的代码删除:NetBeans,尝试从扫描仪读取.txt文件,FileNotFoundException

public class GamePanel extends JPanel 
{ 
    boolean instantiated; 

    public GamePanel() { 
     spaces = new Entity[width][height]; 
     // Tell whether entities have been instantiated yet or not 
     instantiated = false; 
    } 

    // *** Interfacing methods *** 
    // Instatntiate entites in a level from a text file 
    public static void loadLevel(String l) throws FileNotFoundException { 
     File level = new File(l); 
     Scanner s = new Scanner(level); 
     for(int y=1; y<=GamePanel.getH(); y++) { 
      for(int x=1; x<=GamePanel.getW(); x++) { 
       String nextIdentifier = s.next(); 
       switch(nextIdentifier) { 
        case("x"): 
         // Nothing 
         break; 
        case("s"): 
         new WallSandstone(x, y); 
         break; 
       } 
      } 
     } 
    } 

    @Override 
    public void paintComponent(Graphics g) 
    { 
     // Instantiate entities here only once 
     while(instantiated == false){ 
      try { 
       loadLevel("levelOne.txt"); 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(GamePanel.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      instantiated = true; 
     } 
    } 
} 

和levelOne.txt文件:

x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x s s s s s s s s s s s s s x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x s x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x s s s s s s x s s s s s s x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
s s s s s s s s s s s s s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x s x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 

运行这段代码提供了以下错误:

SEVERE: null 
java.io.FileNotFoundException: levelOne.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.util.Scanner.<init>(Scanner.java:611) 
    at wizard.game.GamePanel.loadLevel(GamePanel.java:65) 
    at wizard.game.GamePanel.paintComponent(GamePanel.java:97) 
    at javax.swing.JComponent.paint(JComponent.java:1056) 

我做错了什么?我不能为了我的生活找出为什么这不起作用。

+1

如果您不想指定绝对路径,那么您的文本文件显然位于错误的地方,它应该位于项目的根文件夹中。我不认为'系统找不到指定的文件'可以得到更多描述性的信息...... – redFIVE

+0

我将如何去指定绝对路径?我想将文件保存在当前文件夹中,如果可以的话,可以使用 –

+0

。此外,静态文本文件不属于您的源代码。 – redFIVE

回答

0

当您尝试加载一个文件,你可以尝试使用下面的代码:

ClassLoader classLoader = getClass().getClassLoader(); 
File file = new File(classLoader.getResource("levelOne.txt").getFile()); 

如果没有规范的做包,它会寻找从根本上fileOne.txt文件开始你班级路径的文件夹。

ie .. |-/GamePanel.java 
     |-/levelOne.txt