JFileChooser öffnet sich 2x

Helgon

Bekanntes Mitglied
Hey. Hätt kurz ne Frage

Ich hab folgendes

Java:
			int returnVal = fc.showOpenDialog(ControlPanel.this);
			if(returnVal == JFileChooser.APPROVE_OPTION)
				file0 = fc.getSelectedFile();

Also einfach nur das der FileChooser aufgeht und ich ne Datei anklicken kann.
Klappt auch alles, aber wenn ich dann auf öffnen drücke, öffnet sich der FileChooser nochmal.
Also file0 hat dann schon den richtigen Pfad (wenn ichs zur Kontrolle ausgeben seh ichs ja), aber wenn er sich dann das zweite mal geöffnet hat (nachdem ich auf öffnen im ersten gedrückt hab) und dann im zweiten öffnen drücke, öffnet er nix, sondern schliest sich dann so wie er von Anfang an sollte.

Klingt grad etwas verwirrend, aber genau so ist es 😀
 
Wo steht denn der Code drinnen, in einer Funktion, in einem Listener? Wie oft werden diese 3 Zeilen denn ausgeführt, kannst ma mal ein System.out.println reinmachen.
 
Steht in nem ActionListener von nem Button.

Also nochmal:

Drücke Button ->
FileChooser öffnet sich ->
Ich wähle die Datei aus ->
Drücke im FileChooser Fenster auf öffnen (die Datei eben) ->
(file0.toString() zeigt das der Pfad der Datei richtig ist) ->
->Das erste FileChooser Fenster schliest sich und dafür öffnet sich ein neues ->
Drücke im (zweiten) FileChooser Fenster auf öffnen ->
(file0.toString() zeigt das sich gar nichts getan hat APPROVE_OPTION wahrscheinlich false) ->
-> zweites Fenster schliest sich.

Also es nicht so, dass es nicht funktioniert wie es sollte. Es öffnet sich einfach ein zweites fenster -.-

Java:
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		
		switch(jComboBox1.getSelectedIndex())
		{
		case 0:
			
			int returnVal = fc.showOpenDialog(ControlPanel.this);
			if(returnVal == JFileChooser.APPROVE_OPTION){
				file0 = fc.getSelectedFile();
				System.out.println(file0.toString());

			}
			
			break;
}
 
Also im Debuggen bist du noch nicht weit... Sowas sollst du machen:
Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
         System.out.println("jButton1ActionPerformed wurde gestartet!");
        switch(jComboBox1.getSelectedIndex())
        {
        case 0:
            
            int returnVal = fc.showOpenDialog(ControlPanel.this);
            if(returnVal == JFileChooser.APPROVE_OPTION){
                file0 = fc.getSelectedFile();
            }
            
            break;
}
 
Öhm und was soll mir das bitte bringen?

Jetzt lautet die Ausgabe eben


jButton1ActionPerformed wurde gestartet!
C:\Users\Michael\Documents\~diffdafftop.htm


?

Das es klappt weis ich doch, die Frage ist warum mir der Dialog 2x angezeigt wird
 
Damit du siehst wie oft deine Funktion ausgeführt wird. Steht 2 mal jButton1ActionPerformed wurde gestartet! da, hast du z.B den Listener doppelt geaddet.
 
Ja das ist mir klar, trotzdem danke. Sonst hätte ich ja auch mit
Java:
                System.out.println(file0.toString());

schon gezeigt, aber daran liegts nicht.

Bin mich echt am wundern woher das 2te Fenster kommt :/
 
Das problem ist, dass dein Printline in einer Abfrage ist und muss nunmal nicht jedesmal ausgeführt werden, wenn dein Filechooser angezeigt wird. Wird deine Funktion jetzt mehrmals aufgerufen oder hast du einen äußerst seltsamen, okkulten Bug gefunden?
 
Tja das frag ich mich auch, 2x aufgerufen definitiv nicht.
Hatte bis jetzt keine Zeit noch dran rum zu probieren, aber heut Abend. Werd dann aufjedenfall mal meine "Lösung" poste und mal schauen wo mein dummer Fehler lag.

Grüße 🙂
 
Ich tippe mal, dein Programm schaut in etwa so aus:
Java:
public class DoppelFileChooser extends JFrame {

	private JPanel contentPane;
	private JFileChooser fc;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					DoppelFileChooser frame = new DoppelFileChooser();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public DoppelFileChooser() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		fc=new JFileChooser();
		JButton btnNewButton = new JButton("New button");
		ActionListener al=new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				System.out.println("Listener gefeuert");
				 switch(0)
			        {
			        case 0:
			            
			            int returnVal = fc.showOpenDialog(DoppelFileChooser.this);
			            if(returnVal == JFileChooser.APPROVE_OPTION){
			                File file0 = fc.getSelectedFile();
			                System.out.println(file0);
			            }
			            
			            break;
			        }
			}
		};
		btnNewButton.addActionListener(al);
		btnNewButton.addActionListener(al);
		contentPane.add(btnNewButton, BorderLayout.CENTER);
	}
}
 
Ne nicht ganz. Istn recht komplexes GUI, also mim NetBeans Builder gebastelt.

Wie da der Aufbau ist weiste ja sicher
 
Hab mal schnell paar screens gemacht

1-3

im ersten wenn ich drücke kommt der FileChooser, ich wähle dort eine Datei, drücke "öffnen"
und es erscheint ein neuer FileChooser, der bereits diese Datei bereits ausgewählt hat (siehe Dateiname)

Vllt ist das Problem so besser verständlich. Es sind KEINE 2x RICHTIGEN FileChooser. der zweite wirkt wie ne leere maske wo nur die datei ausgewählt ist.

Grüße
 
Ach du scheise. Pc mal neu gestartet und jetzt klappts. :autsch::lol:???:L

Naja, froh das es jetzt klappt 😀

Auf jeden Fall danke
 

Zurück
Oben