Datei vorhanden, bei Abfrage existiert sie angeblich nicht

Danke, das wusste ich nicht...
Problem beginnt in Zeile 345, bin mir aber nicht sicher, ob es nicht vorher zu beheben ist.

Also nochmal in schön:

Java:
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.util.Vector;
import java.io.*;

public class Prominence extends JPanel implements ActionListener {


    /* Klasse fuer den Startbildschirm
     */
    private class StartWindow extends JPanel implements ActionListener {
        // Startbildschirm
        JTextField _init;
        JTextField _alter;
        JTextField _sex;
        JButton _start;
        String _dateiname;
        JLabel _begruessung;

        // parent window
        Prominence _prom;

	/* Konstruktor der Klasse StartWindow
	*/
        public StartWindow(Prominence p) {
            _prom = p;

	        _dateiname = new String("");

            setSize(800,600);
            setLayout(new GridBagLayout());

            // GridLayout
            GridBagConstraints c = new GridBagConstraints();


            _begruessung = new JLabel("<html><style=\"margin-left:20px;white-space:normal;\">Herzlich Willkommen zum Perzeptionsexperiment!<br><br>Im Folgenden werden Sie jeweils zwei Saetze hoeren, die sich in ihrem Inhalt nicht unterscheiden, <br>wohl aber in ihrer Intonation. Sie koennen sich die Saetze mehrmals anhoeren, indem Sie auf den <br>Button klicken, auf dem der Satz in Orthographie steht. Dort ist auch ein Wort unterstrichen, auf <br>das Sie besonders achten sollen. Ihre Aufgabe ist es, mit dem Balken anzugeben, wie aehnlich <br>sich die Realisierungen des Wortes in den beiden Saetzen sind. <br>Ziehen Sie den Balken ganz nach oben, wenn sie genau gleich prominent sind und ganz nach <br>unten, wenn sie sich sehr unterscheiden. Wenn Sie Ihre Bewertung abegschlossen haben, <br>klicken Sie auf Weiter. <br><br>Viel Erfolg!<br><br><br><br></style></html>");
            c.gridx=0;
            c.gridy=0;
            add (_begruessung,c);

            // 2 Eingabefelder fuer die Statistik
            JLabel text1 = new JLabel("Geben Sie bitte Ihre Initialen ein: ");
            c.gridx=0;
            c.gridy=1;
            add(text1,c);

            JLabel text2 = new JLabel("Geben Sie bitte Ihr Alter ein: ");
            c.gridx=0;
            c.gridy=2;
            add(text2,c);

            JLabel text3 = new JLabel ("Geben Sie bitte Ihr Geschlecht an (m oder w): ");
            c.gridx=0;
            c.gridy=3;
            add(text3,c);


            _init = new JTextField("",2);
            c.gridx=1;
            c.gridy=1;
            add(_init,c);

            _alter = new JTextField("",2);
            c.gridx=1;
            c.gridy=2;
            add(_alter,c);

            _sex = new JTextField("",1);
            c.gridx=1;
            c.gridy=3;
            add(_sex,c);


            // Beim Klick auf den Startbutton wird das Experiment gestartet
            _start = new JButton("Experiment starten");
            _start.addActionListener(this);
            _start.setActionCommand("start_experiment");
            c.gridx=2;
            c.gridy=4;
            add(_start,c);
        }

	/* Methoden um die Klassenvariablen auszulesen.
	*/
       	public String Textfeld1Auslesen() {
              String initialen = _init.getText();
              return initialen;
        }

        public String Textfeld2Auslesen() {
              String alter = _alter.getText();
              return alter;
        }

        public String Textfeld3Auslesen() {
              String sex = _sex.getText();
              return sex;
        }

	    public String holeDateiname() {
	       return _dateiname;
	    }



        /* Hier wird der Dateiname aus den Initialen und dem Alter generiert,
           die Datei geoeffnet und das Experiment gestartet */
        public void actionPerformed(ActionEvent e) {

            if("start_experiment".equals(e.getActionCommand())) {

                // textfelder auslesen, dateiname generieren
               	String initialen = Textfeld1Auslesen();
                String alter = Textfeld2Auslesen();
                String sex = Textfeld3Auslesen();

		        // Dateinamen generieren


		        _dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String(".txt");

		        try {
		        FileReader fr = new FileReader(_dateiname);
		        BufferedReader br = new BufferedReader(fr);
                _dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String ("_1") + new String(".txt");
                    try {
                        FileReader file = new FileReader(_dateiname);
		                BufferedReader buffered = new BufferedReader(file);
                        _dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String("_2") + new String(".txt");
                    } catch (FileNotFoundException f) {
                    }
                } catch (FileNotFoundException f) {
                }


                // experiment starten
                _prom.startExperiment();
            }
        }
    };

    // Klasse fuer den Schlussbildschirm

    private class Thanks extends JPanel implements ActionListener {

        // parent window
        Prominence _prom;
        JLabel _danke;

	// Konstruktor der Klasse Thanks

        public Thanks(Prominence p) {
            _prom = p;

            setSize(800,600);
            setLayout(new GridBagLayout());

            // GridLayout
            GridBagConstraints c = new GridBagConstraints();

            _danke = new JLabel("<html>Vielen Dank, dass Sie an unserem Experiment teilgenommen haben.<br><br>Wenn Sie Informationen &uuml;ber die Ergebnisse bekommen wollen, schreiben Sie doch eine kurze Mail an: blablablubb@web.de</html>");
            c.gridx=0;
            c.gridy=0;
            add(_danke,c);


            JButton _schliessen = new JButton("Fenster schliessen");
            _schliessen.setActionCommand("CLOSE");
            _schliessen.addActionListener(this);
            c.gridx=0;
            c.gridy=1;

            add(_schliessen,c);
        }

        public void actionPerformed(ActionEvent e) {
              String command = e.getActionCommand();
			         System.exit(0);

    	}

    }



    // Experiment
    private class Experiment extends JPanel implements ActionListener {

        // Das Experiment-Design besteht aus dem Slider (von 0-100), dem Satz-Button und dem Weiter-Button
        JSlider _slider;
        JButton _satz;
        JButton _weiter;

        Prominence _prom;

        /* Es werden zwei Vektoren erstellt, in die im Experiment aus der Datei test_description die wav-Files und die
        zugehoerigen Saetze eingelesen werden
        current_wav ist hierbei die aktuelle wav-Datei, deren zugeordneter Satz auf dem Satz-Button erscheint */

        Vector _wav_files;
        Vector _sentences;
	    Vector _bewertung;
        int _current_wav;

        // Konstruktor
        public Experiment(Prominence p)
        {
            _prom = p;

            _wav_files = new Vector();
            _sentences = new Vector();
	        _bewertung = new Vector();
            _current_wav = 0;

            // datei mit zuordnung wav->Satz einlesen
            readExperimentDescription("test_description.txt");

            // Button mit erstem satz und erster datei initialisieren

            setSize(800,600);
            setLayout(new GridBagLayout());

            GridBagConstraints c = new GridBagConstraints();

            // Beim Klick auf den Satz-Button wird die wav-Datei erneut abgespielt
            _satz = new JButton((String)_sentences.elementAt(_current_wav));
            _satz.setActionCommand("play_again");


            c.weightx = 1.0;
            c.gridx = 1;
            c.gridy = 0;
            add(_satz,c);

            // Erstellung des Silders

            _slider = new JSlider(JSlider.VERTICAL,0,100,50);
            _slider.setBackground(Color.WHITE);
            c.gridx=1;
            c.gridy=1;
            add(_slider,c);


            /* Der Slider geht von 0 bis 100, Default ist 50. Auf diesen Wert wird er beim Klick auf den
            Weiter-Button zurueckgestellt.
            Der Wert, den die VP angegeben hat, wird in eine Datei gespeichert. */
            _slider.setMajorTickSpacing(100);
            _slider.setPaintTicks(true);

            // Label Table wird erstellt
            Hashtable labelTable = new Hashtable();
            labelTable.put( new Integer( 0 ), new JLabel("Kein Unterschied") );
            labelTable.put( new Integer( 100 ), new JLabel("Maximaler Unterschied") );
            _slider.setLabelTable( labelTable );

            _slider.setPaintLabels(true);

            _weiter = new JButton("Weiter");
            _weiter.setActionCommand("weiter");

            c.gridx=2;
            c.gridy=2;
            add(_weiter,c);

            _weiter.addActionListener(this);
            _satz.addActionListener(this);
        }

        // Skript zum Abspielen der wav-Dateien
        public void playCurrentWav() {
            new AePlayWave((String)_wav_files.elementAt(_current_wav)).start();
        }

        // Die Textdatei, in der die wav-Dateien und die Saetze aufgelistet sind, wird eingelesen
        public void readExperimentDescription(String filename) {

            try {
               BufferedReader in = new BufferedReader(new FileReader(filename));
               String str;

               while ((str = in.readLine()) != null) {

                String[] splitted = str.split(" ",2);

                /* Vektor _wav_files enthaelt das erste Element der Datei (Dateiname),
                Vektor _sentences das zweite Element (Satz) */
                _wav_files.addElement(splitted[0]);
                _sentences.addElement(splitted[1]);
            }
            in.close();

            } catch (IOException e) {
            }
        }

    // Methoden zum Aufrufen der Bewertungen und der Wav-Dateien (als Strings)
	public Vector holeBewertung() {
		return _bewertung;
	}

	public Vector holeWavDateien () {
        return _wav_files;
    }

        public void actionPerformed(ActionEvent e) {

            // Beim Klick des Benutzers auf "Weiter"
            if("weiter".equals(e.getActionCommand())) {

                // Wenn die letzte Wav-Datei erreicht ist
                if(_wav_files.size()-1 == _current_wav) {

                    int value = _slider.getValue();
                    // letzte Bewertung noch speichern, dann
               	    _bewertung.addElement(value);

                    // Ende erreicht, mach nix mehr
                    _prom.startThanks();
		            // loese speichern aus
		            _prom.speichereErgebnis();
                    return;
                }

                // Wenn das Ende noch nicht erreicht ist...
                _current_wav = _current_wav + 1;

                // slider wert abfragen, in vector speichern
                int value = _slider.getValue();
               	_bewertung.addElement(value);

                // slider resetten
                _slider.setValue(50);


                // neue wav-datei laden(Dateiname aus array auslesen), satz aendern

                playCurrentWav();
                _satz.setText((String)_sentences.elementAt(_current_wav));


                 // Abfrage mit boolean
                boolean exists = (new File("_wav_files.elementAt(_current_wav)")).exists();

                if (exists) {
                    _satz.setText((String)_sentences.elementAt(_current_wav));
                    playCurrentWav();
                } else {
                    _satz.setText((String)"sound file not found");
                    _wav_files.setElementAt(new String("sound file not found"),_current_wav);

                }    
            }


            // Klick des Benutzers auf den Button, auf dem der Satz steht
            else if("play_again".equals(e.getActionCommand())) {
                // wav-datei oeffnen und abspielen
                playCurrentWav();

            }
        }
    };

    Experiment _exp;
    StartWindow _start_window;
    Thanks _thanks;

    public Prominence(){
        setSize(800,600);
        _exp = new Experiment(this);
        _start_window = new StartWindow(this);
	    _thanks = new Thanks(this);

        add(_start_window);
    }



    public void showStartWindow()
    {
        _start_window.setVisible(true);
    }

    public void hideExperiment()
    {
        //_exp.setVisible(false);
    }

    public void startExperiment()
    {
        _start_window.setVisible(false);
        add(_exp);
        _exp.setVisible(true);
        _exp.playCurrentWav();
    }

    // Der Schlussbildschirm wird nach der Bewertung der letzten Audiodatei aufgerufen
    public void startThanks()
    {
        _exp.setVisible(false);
        add(_thanks);
        _thanks.setVisible(true);

    }

    // Im Vektor bewertung befinden sich alle Bewertungen der Audiodateien
    public void speichereErgebnis() {
	   String datei = _start_window.holeDateiname();
	   Vector bewertung = _exp.holeBewertung();
	   Vector wav = _exp.holeWavDateien();

	   // BufferedWriter fuer die Datei oeffnen


	   // fuer jedes Element des Bewertungsvektors
	   for(int k=0; k < bewertung.size(); ++k) {
		  // schreibe index und bewertung in die datei
		  try {
            BufferedWriter bw = new BufferedWriter (new FileWriter (datei, true));

          
                // Ausgabeformat: Index-Dateiname der wav-Datei-Bewertung der wav-Datei (Zeilenumbruch)
                bw.write(k + "-" + wav.elementAt(k) + "-" + bewertung.elementAt(k) + System.getProperty("line.separator"));
                bw.close();


        }
	    catch (IOException f) {
        }
    }
    }

    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
    public void actionPerformed(ActionEvent e) {
        System.out.println("Action start window");
        _start_window.actionPerformed(e);
        System.out.println("Action experiment window");
        _exp.actionPerformed(e);
    }

    private static void createAndShowGUI() {

        //Create and set up the window.
        JFrame frame = new JFrame("ProminenceDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        Prominence newContentPane = new Prominence();
        //newContentPane.addActionListener(this);

        newContentPane.setMinimumSize(new Dimension(800,600));
        newContentPane.setMaximumSize(new Dimension(800,600));
        newContentPane.setPreferredSize(new Dimension(800,600));
        newContentPane.showStartWindow();
        newContentPane.hideExperiment();
        newContentPane.setOpaque(true); //content panes must be opaque
        newContentPane.setBackground(Color.WHITE);
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
        }
    public static void main(String argv[]) {

        createAndShowGUI();

                //ButtonEx1 be = new ButtonEx1();
    }

}
 
Und wo es nun so schön formatiert sind sieht man auch warum das nicht geht:
Java:
boolean exists = (new File("_wav_files.elementAt(_current_wav)")).exists();

sollte eher so sein oder?
Java:
boolean exists = new File((String)_wav_files.elementAt(_current_wav)).exists();
 
Vielen Dank, das war die Ursache des Problems!

Da habe ich wohl den Wald vor lauter Bäumen nicht mehr gesehen...

Liebe Grüße,
Yvonne
 

Neue Beiträge

Zurück