paint() try-catch 语句不会执行访问文件的函数

paint() try-catch statement won't execute a function that accesses a file

好的,所以我有一个名为 gitBits() 的函数,它运行它的代码。它包含一个扫描仪和一个文件。文件 100% 存在是因为我创建了它。如果从具有正确输出的 main() 调用,该函数将正确运行。但是,当我转到 paint() 并调用该函数时,它告诉我存在 FileNotFoundException。为了解决这个问题,我将调用的函数放入一个 try-catch 语句中并捕获了异常。我的代码执行没有任何错误,但问题是我的函数 getBits() 的 return 值从未分配给我的 ArrayLists 数组 arrayArray.

public class bitmaps extends JApplet{
public void init(){
    getContentPane().setBackground(Color.red);
}

//This function reads from a bitmap file and stores the characters (0s and 1s) into arrayLists
public static ArrayList[] getBits() throws FileNotFoundException{
    File bitmapFile = new File("bitmap.bmp");
    Scanner reader = new Scanner(bitmapFile);

    int numLines = 0;

    String readStrings = "";
    ArrayList<String> stringArray = new ArrayList<String>();
    ArrayList<Character> onesZeros = new ArrayList<Character>();

    do{
        readStrings = reader.nextLine();
        System.out.println(readStrings);
        stringArray.add(readStrings);
        numLines++;

        for(char ch: readStrings.toCharArray()){
            onesZeros.add(ch);
        }
    } while(reader.hasNextLine());

    System.out.println(onesZeros);

    reader.close();

    ArrayList[] arrayArray = {stringArray, onesZeros};

    return arrayArray;
}

public void paint(Graphics g){
    super.paint(g);
    g.setColor(Color.black);

    g.drawString("begin", 25, 25); //DRAWS THIS

    ArrayList[] arrayArray = new ArrayList[2]; //THIS IS FINE

    try{
        g.drawString("1", 50, 50); //DRAWS THIS
        arrayArray = getBits(); //DOESN'T EXECUTE THIS ASSIGNMENT
        throw new FileNotFoundException();
    } catch(FileNotFoundException e){

    }
    finally{
        g.drawString("end", 75, 75); //DRAWS THIS
    }

    //SOMETHING I TRIED EARLIER, DOESN'T WORK

    /*ArrayList[] arrayArray = getBits();

    ArrayList<String> bitLines = arrayArray[0];
    ArrayList<Character> onesZeros = arrayArray[1];
    int x = 0;*/

    /*for(char bit: onesZeros){
        g.fillRect(0, 0, 10, 10);
    }*/
}

public static void main(String[] args) throws FileNotFoundException{

}
}

所以我抛出了异常和一切,所以一切都应该没问题。我只是不明白为什么它不会分配给 getBits();

的 return 值

您还期待什么?如果 getBits 抛出异常,当然不会完成分配。

最有可能的问题是,当您 运行 小程序上下文中的代码时,bitmap.bmp 不在当前目录中。

您不需要在程序中抛出 FileNotFoundException。请从 paint 中删除该行 method.Your 程序本身会抛出 flienotfound 异常对象。 抛出新的 FileNotFoundException();请comment/remove这一行

删除 throw new FileNotFoundException(); 所以:

try{
    g.drawString("1", 50, 50); //DRAWS THIS
    arrayArray = getBits(); //DOESN'T EXECUTE THIS ASSIGNMENT
} catch(FileNotFoundException e){

}

否则,每次调用 paint().

时都会抛出该异常

尝试为 bitmap.bmp 使用绝对路径而不是相对路径。 另外,

try
{
    g.drawString("1", 50, 50);
    arrayArray = getBits();
    throw new FileNotFoundException();
}
catch(FileNotFoundException e)
{

}
finally
{
    g.drawString("end", 75, 75);
}

应该是

try
{
    g.drawString("1", 50, 50);
    arrayArray = getBits();
}
catch(FileNotFoundException e)
{
    e.printStackTrace();
}
finally
{
    g.drawString("end", 75, 75);
}