Java JFileChooser不在main方法之外工作
我现在从Java开始,我正在编写一个程序,最后witch创建一个文件并保存它。我想使用JFileChooser让用户选择保存文件的目录 我创建了一个类来使用JFileChooser并相应地保存文件 为了测试它,我让它在main方法的测试类中运行,并且一切正常 为了在程序中使用它,我将代码放入实际类(csvSaver放入saveCsv方法)。 此类i从另一类(Verimetungen)打开,具有: csvSaver.saveCsv(args) 现在它不工作了。。。为什么?我不明白。。。我甚至没有犯错误。只是什么都没发生 这里是来自第一个类的代码(我在“Rechnungen”下的开关中调用类csvSaver):Java JFileChooser不在main方法之外工作,java,jfilechooser,Java,Jfilechooser,我现在从Java开始,我正在编写一个程序,最后witch创建一个文件并保存它。我想使用JFileChooser让用户选择保存文件的目录 我创建了一个类来使用JFileChooser并相应地保存文件 为了测试它,我让它在main方法的测试类中运行,并且一切正常 为了在程序中使用它,我将代码放入实际类(csvSaver放入saveCsv方法)。 此类i从另一类(Verimetungen)打开,具有: csvSaver.saveCsv(args) 现在它不工作了。。。为什么?我不明白。。。我甚至没有犯
在此处输入代码
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的更多理由。