如何没有被选择的文件我插入错误讯息?(How do I insert error message i

2019-10-20 17:04发布

我做的java。 我有这样的“选择”选项,由此用户会选择一个文件。 然后“开始”选项以使用为了某种目的所选择的文件,但我如何确保,如果该文件是空的,当用户点击“开始”,系统会提示错误信息?

我尝试了其他的功能和它的作品,但对于这个“选择”选项,这是行不通的。

这里是我的代码:

    btnSelect.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent args) 
        {
            int i = chooser.showOpenDialog(null);

            if (i == chooser.APPROVE_OPTION) 
            {
                textField.setText(chooser.getSelectedFile().getAbsolutePath());
            }
        }
    });

    btnStart.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent args)
        {
            String fileToPath = chooser.getSelectedFile().getAbsolutePath();

            // If file is not selected, show error message
            if (fileToPath == null)
            {
                JOptionPane.showMessageDialog(null, "PLEASE SELECT 1 FILE!", "Error", JOptionPane.ERROR_MESSAGE); 
            }
        }
    });

然而,也看不到预期的错误消息,我得到了这一点。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Volatility$3.actionPerformed(Volatility.java:204)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    ...

我怎样才能解决这个问题??? 需要帮助。 提前致谢。

Answer 1:

JFileChooser#getSelectedFile将返回null如果没有被选中,所以bascially你正在做这样的事情?

null.getAbsolutePath();

其中,很明显,可以做,相反,你应该先检查返回值的状态,例如...

File selectedFile = chooser.getSelectedFile();

// If file is not selected, show error message
if (selectedFile == null)
{
    JOptionPane.showMessageDialog(null, "PLEASE SELECT 1 FILE!", "Error", JOptionPane.ERROR_MESSAGE); 
} else {
    String fileToPath = selectedFile.getAbsolutePath();
}


Answer 2:

您是否尝试过使用try-catch块?

try {

  textField.setText(chooser.getSelectedFile().getAbsolutePath());

} catch (FileNotFoundException e) {
    System.err.println("FileNotFoundException: " + e.getMessage());
    throw new SampleException(e);

} catch (IOException e) {
    System.err.println("Caught IOException: " + e.getMessage());
}

或者你可以只抛出一个异常: 如何扔在Java中的一般例外? 干杯!



Answer 3:

这可能不是最有效的解决方案,但它肯定工程。

public static boolean isFileEmpty(File file) throws IOException {
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        int count = 0;
        String line;

        while ((line = br.readLine()) != null) {
            count++;
        }

        if (count == 0) {
            return true;
        }
    } catch (FileNotFoundException | NullPointerException e) {
        e.printStackTrace();
        return false;
    }

    return false;
}

基本上,这个工程通过使将试图读取该文件,并计数变量,将让文件读取器读取了线的量的跟踪文件阅读器。 如果循环结束,数仍为0,这意味着文件读取器没有读取任何行,因此必须为空。 这是所有在尝试捕捉包裹起来,以确保一)该文件存在和b)文件的参数已经被初始化并且不为空。



文章来源: How do I insert error message if no file is selected?