ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
525
525
EMPFEHLEN
-
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 ü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();
}
}
-
25.07.07 11:04 #2
- 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)
-
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
-
25.07.07 11:21 #4
- 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
-
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
-
25.07.07 11:40 #6
- 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?
-
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
-
25.07.07 12:05 #8
- 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
-
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
-
Formatiert doch euren Code bitte mit den zur Verfügung stehenden
[java]
...
[/java]
Tags.
-
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 ü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(); } }
-
-
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
-
Variable angeblich nicht vorhanden
Von Cherrycoke im Forum JavaAntworten: 2Letzter Beitrag: 18.06.10, 14:32 -
php upload Datei existiert Abfrage
Von ddbug im Forum PHPAntworten: 12Letzter Beitrag: 14.01.06, 15:52 -
Abfrage, ob eine Datei existiert
Von gerd87 im Forum Javascript & AjaxAntworten: 11Letzter Beitrag: 13.09.05, 20:30 -
Datei lässt sich nicht öffnen, angeblich greift anderer Benutzer zu
Von Henrik im Forum Office-AnwendungenAntworten: 3Letzter Beitrag: 16.10.02, 12:11 -
Abfrage ob URL / Datei existiert
Von wiedsche im Forum ASPAntworten: 15Letzter Beitrag: 28.05.02, 15:22





Zitieren

Login





