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);
}
好的,所以我有一个名为 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);
}