Java JFileChooser不在main方法之外工作

Java JFileChooser不在main方法之外工作,java,jfilechooser,Java,Jfilechooser,我现在从Java开始,我正在编写一个程序,最后witch创建一个文件并保存它。我想使用JFileChooser让用户选择保存文件的目录 我创建了一个类来使用JFileChooser并相应地保存文件 为了测试它,我让它在main方法的测试类中运行,并且一切正常 为了在程序中使用它,我将代码放入实际类(csvSaver放入saveCsv方法)。 此类i从另一类(Verimetungen)打开,具有: csvSaver.saveCsv(args) 现在它不工作了。。。为什么?我不明白。。。我甚至没有犯

我现在从Java开始,我正在编写一个程序,最后witch创建一个文件并保存它。我想使用JFileChooser让用户选择保存文件的目录

我创建了一个类来使用JFileChooser并相应地保存文件

为了测试它,我让它在main方法的测试类中运行,并且一切正常

为了在程序中使用它,我将代码放入实际类(csvSaver放入saveCsv方法)。 此类i从另一类(Verimetungen)打开,具有: csvSaver.saveCsv(args)

现在它不工作了。。。为什么?我不明白。。。我甚至没有犯错误。只是什么都没发生

这里是来自第一个类的代码(我在“Rechnungen”下的开关中调用类csvSaver):
在此处输入代码

    import javax.swing.JOptionPane;
    public class Vermietungen 
    {
    public enum AccountType {Erfassen, Bearbeiten, Lesen, Löschen, Rechnungen}
    public static void vermiet (String[] args) 
    {
    AccountType[] choicesI = {AccountType.Erfassen, AccountType.Bearbeiten, AccountType.Lesen, AccountType.Löschen, AccountType.Rechnungen };
    AccountType selectVer = (AccountType) JOptionPane.showInputDialog(null, "Was möchten Sie machen?", "Vermietungenverwaltung", JOptionPane.INFORMATION_MESSAGE, null, choicesI, choicesI[4]);

    if (selectVer!=null)
    {
        switch (selectVer) 
        {
            case Erfassen:
                selectVer = null;
                VerErfassen.neueVermietung(args);
                break;

            case Bearbeiten:
                selectVer = null;
                VerBearbeiten.verChange(args);
                break;

            case Lesen:
                selectVer = null;
                VerLesen.verRead(args);
                break;

            case Löschen:
                selectVer = null;
                VerLöschen.verDelete(args);
                break;

            case Rechnungen:
                selectVer = null;
                csvSaver.saveCsv(args);
                break;

            default:
                selectVer = null;
                Hauptmenü.hauptmenü(args);
                break;
        } 
    }
    else
    {
        Hauptmenü.hauptmenü(args);
    }
}
这是JFileChooser的代码:

    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import javax.swing.Box;
    import javax.swing.JFileChooser;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    public class csvSaver 
    {
        public enum AccountType {Monat, Jahr}
        public static void saveCsv(String[] args) 
        {
        String dateinameVer = "VermietungVerwaltung.txt";
        File verFile = new File(dateinameVer);

    boolean tester = false;
    try 
    {   JFileChooser chooser = new JFileChooser();
        chooser.setDialogTitle("Wo möchten Sie die CSV-Datei abspeichern?");
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) 
        {
            JTextField aField = new JTextField(4);
            JTextField bField = new JTextField(2);
            JPanel csvPanel = new JPanel();

            csvPanel.add(new JLabel("Jahr"));
            csvPanel.add(aField);
            csvPanel.add(Box.createHorizontalStrut(1)); // a spacer
            csvPanel.add(new JLabel("Monat"));
            csvPanel.add(bField);

            int csvResult = JOptionPane.showConfirmDialog(null, csvPanel,"Von welchem Monat/Jahr möchten Sie die Rechnungsdaten?", JOptionPane.OK_CANCEL_OPTION);
            if (csvResult == JOptionPane.OK_OPTION)
            {
                String csvJahr = aField.getText();
                String csvMonat = bField.getText();

                File csvFile = new File (csvJahr + "_" + csvMonat + "_Rechnungen.txt");
                System.out.println(csvFile);

                String verId = "";
                String verInId = "";    
                String verInName = "";
                String verKuId = "";
                String verKuVorN = "";
                String verKuName = "";  
                String startT = "";
                String startM = "";
                String startJ = "";
                String endT = "";
                String endM = "";
                String endJ = "";
                String preis = "";
                String dauer = "";

                    FileWriter fw = new FileWriter(csvFile, true);
                    BufferedWriter bw = new BufferedWriter(fw);
                    PrintWriter pw = new PrintWriter(bw);
                    Scanner sucher = new Scanner(verFile);
                    sucher.useDelimiter("[,\n]");
                    boolean verFinder = false;

                    //File durchgehen:
                    while(sucher.hasNext())
                    {   
                        //Linie auslesen:
                        verId = sucher.next();
                        verInId = sucher.next();
                        verInName = sucher.next();
                        verKuId = sucher.next();
                        verKuVorN = sucher.next();
                        verKuName = sucher.next();
                        startT = sucher.next();
                        startM = sucher.next();
                        startJ = sucher.next();
                        endT = sucher.next();
                        endM = sucher.next();
                        endJ = sucher.next();
                        preis = sucher.next();
                        dauer = sucher.next();

                        //entspricht Linie dem Suchbegriff? wenn nein:
                        if (startJ.equals(csvJahr)) 
                        {   
                            if (startM.equals(csvMonat)) 
                            {
                            //in neue Datei kopieren:
                            pw.println(verId + "," + verInId + "," + verInName + "," + verKuId + "," + verKuVorN + "," + verKuName + "," + startT + "," + startM + "," + startJ + "," + endT + "," + endM + "," + endJ + "," + preis + "," + dauer);
                            //JOptionPane.showMessageDialog(null, "Das CSV-File wurde in: " + chooser.getSelectedFile() + " gespeichert.", "Gespeichert!", 1);
                            }
                        }
                    }
                    sucher.close();
                    pw.flush();
                    pw.close();
            }
            else
            {
                 Hauptmenü.hauptmenü(args);
                  tester = true;
            }
        } 
        else 
        {
            Hauptmenü.hauptmenü(args);
            tester = true;
        }
    }catch (IOException e) 
    {
        e.printStackTrace();
    }
    if (tester ==false)
    {
        Hauptmenü.hauptmenü(args);
    }
    }
    }
所以在JFileChooser中,永远不会打开。。。 (如果我将此代码复制/粘贴到主方法中,它将打开

谁能帮我?
非常感谢。

您是否尝试过在行之间放置一些sysout以查看代码的哪些部分被执行?如果您的变量似乎已初始化,则没有。此外,请不要使用德语,英语在编程中更容易理解。此外,您还应该阅读java命名约定HI!请发布一段-最短的代码这说明了您的问题。您可以而且应该删除所有与您的问题无关的代码。此外,请使用IDE格式化您的代码,使其具有一致的缩进,以便其他人可以阅读。showOpenDialog的参数是父窗口,即使我对此不确定,我也不认为有任何问题OW可以是它自己的父。如果你没有其他窗口,考虑使用<代码> null <代码>而不是<代码>选择器< /代码>。你在哪里调用<代码> Vimmie<代码>还不清楚。查看MCVE的更多理由。