1

所以我在实现 JFileChooser 时遇到了问题,我制作了一个非常简单的程序,需要抓取一个 CSV 文件。我希望实现一个非常简单的文件选择器,然后检查以确保扩展名是 CSV。

这是我的运行类的代码,用户将在其中选择文件。

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;


public class Run 
{   
    JFrame frame = new JFrame();
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.showOpenDialog(frame);
    File selFile = fileChooser.getSelectedFile();
    Reader reader = new Reader(selFile);
}

这是我在编译之前在 eclipse 中遇到的错误。

Syntax error on tokens, misplaced construct.

错误发生在 fileChooser 和 showOpenDialog 之间的时间段。

第二个错误是在框架上说的。

Syntax error on token "frame", VariableDecleratorID expected after this token.

截至目前,我不完全确定我做错了什么。

感谢您的任何帮助。

4

2 回答 2

3

类中的所有代码行都是实例变量的声明及其初始化,除了

fileChooser.showOpenDialog(frame);

这是对对象的方法调用,因此它不能是类的成员。

类成员(简化)是属性和方法(扩展版:它还可以包括静态变量、静态方法、内部类、静态块……)

其背后的原因很简单:在 OO 环境中,如果您不触发方法调用,则不会发生任何事情,也不应该发生任何事情。

因此,您的第一步是将代码放入方法中,这可能是构造函数或普通方法。

第二步是你应该调用这个方法。如果它在构造函数中,那么它会在(并且每次)创建类的新实例时执行。否则,您需要实例化该类,然后调用该方法。

第三步是程序启动时需要启动所有代码,通过指示JVM“运行”特定类来启动java程序,然后这个类必须有一个public static void main(String[] args ) 方法,这是每个 java 应用程序的入口点。

如果你只是想测试一些东西,把所有 5 行代码放在一个 main 方法中......

所以

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;


public class Run {   
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.showOpenDialog(frame);
        File selFile = fileChooser.getSelectedFile();
        Reader reader = new Reader(selFile);
    }
}
于 2013-09-26T22:14:15.610 回答
2

该声明

fileChooser.showOpenDialog(frame);

是非声明性语句,因此需要在代码块中,例如方法。该应用程序没有main方法,因此不仅可以简单地用作语句的周围代码块,还可以用作应用程序的入口点。

public class Run {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.showOpenDialog(frame);
                File selFile = fileChooser.getSelectedFile();
                // use selFile...
            }
        });
    }
}
于 2013-09-26T22:01:58.043 回答