Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中正确实现FileChooser_Java_File_Csv - Fatal编程技术网

如何在Java中正确实现FileChooser

如何在Java中正确实现FileChooser,java,file,csv,Java,File,Csv,所以我在实现JFileChooser时遇到了问题,我正在制作一个非常简单的程序,需要获取一个CSV文件。我希望实现一个非常简单的文件选择器,然后检查以确保扩展名是CSV 这是我的run类的代码,用户将在其中选择文件 import java.io.File; import javax.swing.JFileChooser; import javax.swing.JFrame; public class Run { JFrame frame = new JFrame();

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

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

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.
到目前为止,我还不能完全确定我做错了什么

谢谢你的帮助。

声明

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...
            }
        });
    }
}
声明

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...
            }
        });
    }
}

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

fileChooser.showOpenDialog(frame);
这是对对象的方法调用,因此它不能是类的成员

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

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

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

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

第三步是,当程序启动时,需要启动所有代码,您通过指示JVM“运行”特定类来启动java程序,该类必须具有公共静态void main(String[]args)方法,这是每个java应用程序的入口点

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...
            }
        });
    }
}
如果你只是想测试一些东西,把所有的5行代码放在一个主方法中

所以


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

fileChooser.showOpenDialog(frame);
这是对对象的方法调用,因此它不能是类的成员

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

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

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

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

第三步是,当程序启动时,需要启动所有代码,您通过指示JVM“运行”特定类来启动java程序,该类必须具有公共静态void main(String[]args)方法,这是每个java应用程序的入口点

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...
            }
        });
    }
}
如果你只是想测试一些东西,把所有的5行代码放在一个主方法中

所以


所以我根本不能把它放在我的构造函数里?或者更确切地说,我不知道我无法在构造函数中使用它。通常情况下,当它实例化的类出现时,您不希望出现对话框…:@tracticallysuperioravocado您可以在构造函数中使用它,这是一个非常糟糕的主意,但您可以。问题是你的构造函数
public Run{..some code..}
in你的Run类中没有这个代码,你可以添加这个构造函数,然后在那里填充它。我一定是半睡半醒了。我完全忘记了你需要一个main方法,所以我根本不能在我的构造函数中使用它?或者更确切地说,我不知道我无法在构造函数中使用它。通常情况下,当它实例化的类出现时,您不希望出现对话框…:@tracticallysuperioravocado您可以在构造函数中使用它,这是一个非常糟糕的主意,但您可以。问题是你的构造函数
public Run{..some code..}
in你的Run类中没有这个代码,你可以添加这个构造函数,然后在那里填充它。我一定是半睡半醒了。我完全忘记了您需要一个main方法的事实。请看这里:请看这里: