Java 为什么我仍然有FileNotFoundException从未在相应的try语句体中抛出?

Java 为什么我仍然有FileNotFoundException从未在相应的try语句体中抛出?,java,swing,file,try-catch,Java,Swing,File,Try Catch,对于我的应用程序,我一直收到这样的编译错误,即在相应的try语句体中从未抛出FileNotFoundException**我在actionlistener事件处理部分中有这样的错误,所以我不确定这是否是正确的方法 我知道catch异常位与try语句相关,它必须被称为related,因此在本例中,我将从用户的输入启动一个新的File对象类,但错误仍然存在 你们能给我一些建议吗?我还是个新手,不久前才开始使用GUI 主要类别: import javax.swing.*; import java.aw

对于我的应用程序,我一直收到这样的编译错误,即在相应的try语句体中从未抛出FileNotFoundException**我在actionlistener事件处理部分中有这样的错误,所以我不确定这是否是正确的方法

我知道catch异常位与try语句相关,它必须被称为related,因此在本例中,我将从用户的输入启动一个新的File对象类,但错误仍然存在

你们能给我一些建议吗?我还是个新手,不久前才开始使用
GUI

主要类别:

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

class MyFileLister extends JPanel implements ActionListener {

private JLabel prompt = null;

private JTextField userInput = null;

private JTextArea textArea = null;

public MyFileLister()
{
    prompt = new JLabel("Enter filename: ");
    prompt.setOpaque(true);
    this.add(prompt);

    userInput = new JTextField(28);
    userInput.addActionListener(this);
    this.add(userInput);

    textArea = new JTextArea(10, 30);
    textArea.setOpaque(true);
    JScrollPane scrollpane = new JScrollPane(textArea);
    this.add(textArea, BorderLayout.SOUTH);
}

Scanner s = null;
File af = null;

public void actionPerformed(ActionEvent f)
{
    try
    {
        af = new File(userInput.getText());
    }
    catch(FileNotFoundException e)
    {
        System.out.println("Error");
    }
}
}
驾驶员级别:

import java.util.*;
import java.awt.*;
import javax.swing.*;


class TestMyFileLister {

public static void main(String [] args)
{
    MyFileLister thePanel = new MyFileLister();

    JFrame firstFrame = new JFrame("My File Lister");

    firstFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    firstFrame.setVisible(true);
    firstFrame.setSize(500, 500);
    firstFrame.add(thePanel);


}
}

java.io.File
对象只是表示一个抽象路径。由其表示的文件(或目录)是否存在在其创建时无关紧要。
文件的构造函数不检查路径是否指向现有文件或文件夹


只有当你想打开文件时,它才起作用。然后您将得到一个
FileNotFoundException
(如果它不存在)。

java.io.File
对象只表示一个抽象路径。由其表示的文件(或目录)是否存在在其创建时无关紧要。
文件的构造函数不检查路径是否指向现有文件或文件夹

只有当你想打开文件时,它才起作用。然后您将得到一个
FileNotFoundException
(如果它不存在)。

这是因为只能抛出
NullPointerException

公共文件(字符串路径名)

通过将给定的路径名字符串转换为抽象路径名来创建新的文件实例。如果给定的字符串是空字符串,则结果是空的抽象路径名

参数: 路径名-路径名字符串

抛出: NullPointerException-如果路径名参数为null

将您的
catch
更改为

catch(NullPointerException e) {
并相应地采取行动。

这是因为只能抛出
NullPointerException

公共文件(字符串路径名)

通过将给定的路径名字符串转换为抽象路径名来创建新的文件实例。如果给定的字符串是空字符串,则结果是空的抽象路径名

参数: 路径名-路径名字符串

抛出: NullPointerException-如果路径名参数为null

将您的
catch
更改为

catch(NullPointerException e) {

错误很明显:语句
af=newfile(userInput.getText())不会(在任何时候)抛出
FileNotFoundException
。Java允许您创建文件系统中不存在的
文件
对象。如果没有,您将如何创建新文件;)因此,您的
try catch
块在这里是无用的。您可能希望将异常类型更改为
NullPointerException
,以便在将
null
传递给
File
构造函数时处理这种情况。

错误非常清楚:语句
af=newfile(userInput.getText())不会(在任何时候)抛出
FileNotFoundException
。Java允许您创建文件系统中不存在的
文件
对象。如果没有,您将如何创建新文件;)因此,您的
try catch
块在这里是无用的。您可能希望将异常类型更改为
NullPointerException
,以便在将
null
传递给
File
构造函数时处理这种情况。

FileNotFoundException
更改为just
exception
@mickey,这是错误和糟糕的编程实践。如果path参数为null,则该文件构造函数抛出NullPointerException,而不是FileNotFoundException。换成NPE,你会没事的。我不同意这是错误的,这只是一个建议,让天蝎座开始。一旦捕获到异常,当他/她看到异常时,可以将其更改为更具体的内容。@mickey感谢您的帮助@mttdbrd感谢您给我一个更好的建议:将
FileNotFoundException
更改为
Exception
@mickey,这是错误和糟糕的编程实践。如果path参数为null,则该文件构造函数抛出NullPointerException,而不是FileNotFoundException。换成NPE,你会没事的。我不同意这是错误的,这只是一个建议,让天蝎座开始。一旦捕获到异常,当他/她看到异常时,可以将其更改为更具体的内容。@mickey感谢您的帮助@mttdbrd感谢您给我一个更好的建议:D@JonathanDrapeau提供了一些有用的信息,让我明白为什么会出现这个错误。干杯@Jonathan Drapeau提供了一些有用的信息,让我明白为什么我会犯这个错误。干杯