我有这个方法应该加载一个文件,但它给了我这个错误:
NamnMetod.java:175: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
BufferedReader inFil = new BufferedReader(new FileReader(fil));
^
NamnMetod.java:177: error: unreported exception IOException; must be caught or declared to be thrown
String rad = inFil.readLine();
^
这是我的代码:
public static void hämtaFrånText() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
String aktuellMapp = System.getProperty("user.dir");
JFileChooser fc = new JFileChooser(aktuellMapp);
int resultat = fc.showOpenDialog(null);
if (resultat != JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, "Ingen fil valdes!");
System.exit(0);
}
String fil = fc.getSelectedFile().getAbsolutePath();
String[] namn = new String[3];
String output ="";
BufferedReader inFil = new BufferedReader(new FileReader(fil));
String rad = inFil.readLine();
int antal = 0;
while(rad != null){
namn[antal] = rad;
rad = inFil.readLine();
antal++;
}
inFil.close();
}
});
}catch(IOException e2) {
JOptionPane.showMessageDialog(null,"The file was not found!");
}
}
我很困惑,因为我已经捕获了IOException和FileNotFoundException,但我仍然收到此错误......
答案 0 :(得分:2)
您正在创建 Runnable
的代码中捕获它们,而异常需要在 Runnable.run()
中捕获。
在您的run
方法中移动try / catch。
此外,使用try-with-resources确保FileReader始终关闭,即使发生异常:
try (FileReader fr = new FileReader(fil);
BufferedReader inFil = new BufferedReader(fr)) {
// ...
// No need to close `fr` or `inFil` explicitly.
}
答案 1 :(得分:0)
以下是解决方案:
public static void hämtaFrånText() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
try {
String aktuellMapp = System.getProperty("user.dir");
JFileChooser fc = new JFileChooser(aktuellMapp);
int resultat = fc.showOpenDialog(null);
if (resultat != JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, "Ingen fil valdes!");
System.exit(0);
}
String fil = fc.getSelectedFile().getAbsolutePath();
String[] namn = new String[3];
String output = "";
BufferedReader inFil = new BufferedReader(new FileReader(fil));
String rad = inFil.readLine();
int antal = 0;
while (rad != null) {
namn[antal] = rad;
rad = inFil.readLine();
antal++;
}
inFil.close();
}catch(FileNotFoundException e1) {
JOptionPane.showMessageDialog(null,"The file was not found!");
}
catch(IOException e2) {
JOptionPane.showMessageDialog(null, "Failed!");
}
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
Reason
:run是一个来自Runnable的方法,在eventQueue中已经定义了它,并且在方法定义中,没有在throw in方法声明语句中处理或添加异常的地方。因此,FileNoFoundException和IOException都应该在方法内部而不是在外部给出。
此外,EventQueue抛出了InterruptedException检查异常,我添加了另一个try catch来处理该异常。
希望它有所帮助。
答案 2 :(得分:0)
这里有范围问题。
您正在使用的try和catch将捕获hämtaFrånText()
的例外但不是方法run()
的
异常可能发生在run
方法内部,而不是在方面。
你给出的try-Cathc只会关心其范围内发生的异常,因为你没有抛出这些异常,不是你的hämtaFrånText()
方法来处理run()
内发生的事情。
如果run
是您定义的方法,那么您可以扔掉它们。
但现在只有你可以选择在run()
方法中捕获它们。
所以试试
public void run() {
try{
.............
...........
}catch(FileNotFoundException e1) {
JOptionPane.showMessageDialog(null,"The file was not found!");
}
catch(IOException e2) {
JOptionPane.showMessageDialog(null, "Failed!");
}
}
答案 3 :(得分:0)
try-catch块属于run() - " Runnable"的方法。 - 这个run() - 方法不能抛出任何异常。提交Runnable不会抛出异常。
答案 4 :(得分:0)
你需要在run方法中移动你的try catch块,这应该可以解决问题,你还需要处理InvocationTargetException
抛出的InterruptedException
和EventQueue.invokeAndWait(Runnable)
来正确编译你的类。