tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
525
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    Hallo!

    Ich habe eine Abfrage in meinem Skript, ob eine wav-Datei vorhanden ist (die auch definitiv vorhanden ist). Allerdings existiert sie laut Programm nicht. Kann mir jemand helfen?
    (tut mir leid, dass es so viel ist, aber ich habe die Befürchtung, dass der Fehler an irgendeiner Stelle in dem Programm liegt, an der ich ihn gar nicht vermute...)

    Danke schonmal!

    Yvonne

    Quellcode (die entsprechende Abfrage ist fett gekennzeichnet):

    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) {
    }

    // Der Versuch, eine automatische Indexnummer zu vergeben... ist aufgrund
    // mehrerer Fehlermeldungen gescheitert





    // 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;
    System.out.println(_current_wav + System.getProperty("line.separator"));

    // 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

    boolean exists = (new File("_wav_files_elementAt(_current_wav)")).exists();
    if (exists) {
    System.out.println("existiert" + System.getProperty("line.separator"));
    // File or directory exists
    } else {
    System.out.println("existiert nicht" + System.getProperty("line.separator"));
    // File or directory does not exist
    }


    }

    // 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();
    }

    }
     

  2. #2
    Praktikant132 Praktikant132 ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    14
    Hi,
    habe mir zwar nicht alles durchgelesen, aber das werd ich denk ich gleich machen
    hast du mal im debuger nachgeschaut wann der fehler genau auftritt
    und in folgendem "abschnitt":

    _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) {
    }

    hast da ma reingeschaut ob der dateipfad richtig generiert wird?



    //Änderung: [Dazu geschriebenes]

    /* Dateinamen generieren

    [Du generierst hier doch in _dateiname schon die initialen ect oder seh ich das falsch? und im try block hängst du an die variable _dateiname, welche mittlerweile aus den folgendem besteht:initialen + new String("_") + alter + new String ("_") + sex + new String(".txt") das ganze nochmal dran könnte da der fehler liegen?]


    _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) {
    }
    Geändert von Praktikant132 (25.07.07 um 11:08 Uhr)
     

  3. #3
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    Danke für deine Antwort!

    Allerdings habe ich mit der Datei, in die geschrieben werden soll, keinerlei Probleme...
    Die wird einwandfrei geschrieben und wenn ich nicht überprüfe, ob die wav-Dateien vorhanden sind, das also einfach übergehe (die if-Verzweigung im fett gedruckten Teil weglasse), dann
    werden auch die Dateinamen und die Bewertungen in die Textdatei geschrieben.

    Und ich denke, es ist kein Fehler, den der Debugger finden würde, da es eher was semantisches denn was syntaktisches ist. Das Programm läuft, nur leider nicht so, wie ich das gerne hätte

    Genauer gesagt: Zum Test habe ich eine wav-Datei gelöscht. Meine Test-Ausgabe in die Kommandozeile gibt mir aus, dass keine Datei (außer der ersten) vorhanden ist.
    (obwohl wie gesagt, alle vorhanden sind, außer einer).

    Ich hoffe, ich bin nicht zu kryptisch

    lg Yvonne
     

  4. #4
    Praktikant132 Praktikant132 ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    14
    Naja mir ist dein code oben was zu unübersichtlich
    hast es eventuell schonmal mit der komplett pfadangabe versucht? sprich c://.... usw.
    ich schau gleich nochmal drüber, aber deine aussage eben hat mich verwirrt

    also du hast 2 wav dateien?
    der greift auch mim richtigen namen/pfad auf die dateien zu?
    aber er sagt dann ne die gibbet nit?
    macht der das bei beiden oder nur bei einer?

    und das mim debuger war so gemeint um zu sehen ob der auch z.b. die richtigen pfadangaben ect hat wenn nein dann ists klar das er die nit läd
     

  5. #5
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    Sorry für den Monstercode, dachte nur ,dass es sinnvoll wäre, alles zu posten, nicht dass gerade die Fehlerquelle fehlt.

    Die Pfade stimmen alle...

    Ich versuchs mal zusammenzufassen:
    Das Programm besteht aus Startfenster, einem Objekt für die wav-Dateien (das pro Datei neu erzeugt wird) und einem Schlussbildschirm.
    Probleme bereitet nur das Objekt für die wav-Dateien.
    Das ist so aufgebaut, dass beim Aufruf die Datei und ein zugehöriger Text aus einer Textdatei eingelesen werden. Die wav-Datei wird abgespielt und der Text steht auf einem Button, der, wenn man ihn klickt, die Datei erneut abspielt.

    Problem:
    Dei wav-Dateien werden alle abgespielt (außer die, die tatsächlich nicht existiert, das ist übrigens die dritte). Bei der ersten wav-Datei wird auch der Text auf dem Button richtig dargestellt. Ab der zweiten steht auf dem Button "wav-file not found", obwohl hier auch noch die Datei abgespielt wird. Der Button-Text ändert sich auch nicht mehr, das heißt, er lautet bis zur fünften (und letzten) Datei so. Wie gesagt, obwohl nur die dritte nicht existiert.

    Den Quelltext hierzu hatte ich auskommentiert, da das andere zum Testen einfacher war, hier ist er (steht im Original-Quelltext genau an der Stelle des fett gedruckten):


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

    }

    lg Yvonne
     

  6. #6
    Praktikant132 Praktikant132 ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    14
    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);

    }

    bei dem text steht also nachher auf dem button sound file not found (ab file 2 durchgehend) file 3 existiert nicht und sonst alle.
    was genau bewirkt :
    _wav_files.setElementAt(new String("sound file not found"),_current_wav);
    ?
    läd der denn auch die wav files 4 und 5 bzw spielt sie korrekt ab?
     

  7. #7
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    bei dem text steht also nachher auf dem button sound file not found (ab file 2 durchgehend) file 3 existiert nicht und sonst alle.
    was genau bewirkt :
    _wav_files.setElementAt(new String("sound file not found"),_current_wav);
    ?
    läd der denn auch die wav files 4 und 5 bzw spielt sie korrekt ab?


    Genau. Er spielt alle korrekt ab, bis auf die Date, die ich gelöscht habe (die dritte in der eingelesenen Textdatei). Die Zeile oben schreibt den String "sound file not found" in den Vektor, in dem die wav-Dateien als Strings stehen, damit man in der Ausgabedatei sieht, wo der Fehler passiert ist und diese Datei aus der Auswertung rausnimmt.
    Ansonsten hätte man eine falsche Bewertung (weil die Versuchsperson die Datei ja gar nicht gehört hat) und würde es nicht mal merken.

    lg Yvonne
     

  8. #8
    Praktikant132 Praktikant132 ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    14
    was ich nicht verstehe das beim zweiten button ja schon sound not found drinn steht :-/
    das müsst ja erst beim dritten stehen. wenn die vierte datei abgespielt wird steht es immernoch da richtig?
    mir gehen die ideen aus eventuell könnts am array liegen aus dme du die dateien holst

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

    oder das _current_wav nicht korrekt hoch gezählt wird nachdem der fehler auftrat, weil sonst müsst der ja wieder den datei namen anzeigen im button und nich sound not found...
    hmmmmm mehr fällt mir auch nich ein muss nun auch ma mittag machen und danach an meinen sachen weiter basteln :-/ schad das ich nit helfne konnt
    viel erfolg noch
    Gruß der Praktikant
     

  9. #9
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    Danke trotzdem!

    Der Zähler zählt richtig, das habe ich überprüft.
    Naja, genau da hänge ich ja auch. Ich denke, dass es irgendwie an der Struktur liegt, da das Programm keinen Unterschied macht zwischen Dateien, die existieren und welchen, die nicht existieren.
    Wenn ich den Zähler ausgeben lasse, nachdem er sich um 1 erhöht, fängt die Ausgabe erst mit 1 an, nicht mit 0. Ich denke, dass es damit zusammenhängt, dass die erste Datei woanders aufgerufen wird (genau den Teil hatte mir aber mein Freund programmiert, d.h. da blicke ich nicht ganz durch). Das würde auch erklären, wieso die erste Datei und der Button-Text noch normal eingebunden werden...

    lg Yvonne
     

  10. #10
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Formatiert doch euren Code bitte mit den zur Verfügung stehenden
    [java]
    ...
    [/java]
    Tags.
     

  11. #11
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    
    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: [email]blablablubb@web.de[/email]</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();
        }
     
    }
     

  12. #12
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Und wo es nun so schön formatiert sind sieht man auch warum das nicht geht:
    Code java:
    1
    
    boolean exists = (new File("_wav_files.elementAt(_current_wav)")).exists();

    sollte eher so sein oder?
    Code java:
    1
    
    boolean exists = new File((String)_wav_files.elementAt(_current_wav)).exists();
     

  13. #13
    Aiwonnie Aiwonnie ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    40
    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
     

Ähnliche Themen

  1. Variable angeblich nicht vorhanden
    Von Cherrycoke im Forum Java
    Antworten: 2
    Letzter Beitrag: 18.06.10, 14:32
  2. php upload Datei existiert Abfrage
    Von ddbug im Forum PHP
    Antworten: 12
    Letzter Beitrag: 14.01.06, 15:52
  3. Abfrage, ob eine Datei existiert
    Von gerd87 im Forum Javascript & Ajax
    Antworten: 11
    Letzter Beitrag: 13.09.05, 20:30
  4. Antworten: 3
    Letzter Beitrag: 16.10.02, 12:11
  5. Abfrage ob URL / Datei existiert
    Von wiedsche im Forum ASP
    Antworten: 15
    Letzter Beitrag: 28.05.02, 15:22