Fehler :S

10/16/2015 15:37 pioder#1
Hey,
die Datei soll auf Eingabe des Users eine .WAV Datei abspielen.
Kann mir jemand sagen, wo der Fehler liegt?

PHP Code:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineEvent;
import java.io.File;
import java.io.FileInputStream;
import java.util.*;

public class 
Joo {
    
        public static 
void main(String[] argsthrows Exception {
        
            
//User Eingabe
            
Scanner scanner = new Scanner (System.in);
            
System.out.printl("Drückste 1 sonst geschte weg mit 2");
            
            while (
true) {
            
System.out.printl("Deine Eingabe");
            
String.eingabe scanner.nextLine();
            
            
// Eingabewert 1 spielt die musik ab
            
if (Integer.parseInt(eingabe) == 1) {
                    
Object lock = new Object();
            
// Spielt die .Wav Datei ab
            
String soundFile "/users/Mr.LongDong/desktop/Olexesh.wav";
            
            try (
AudioInputStream ais AudioSystem.getAudioInputStream(new File(soundFile))){
            
                
Clip clip AudioSystem.getClip();
                
clip.open(ais);
                
clip.addLineListener((e) -> {
                    if (
e.getType() == LineEvent.Type.STOP) {
                        
synchronized (lock) {
                            
lock.notify();
                        }
                    }
                });
                
                
clip.start();
            }
            
            
synchronized (lock) {
                
lock.wait();
                        
            } else {
                
System.out.println("Haddeee Lan du willst keine Musik");
                break;
                
        
                    }
                }
            }
        }
    } 
10/17/2015 02:40 TheRealLenon#2
Hallöchen,

Ich kenne mich mit Java nicht 100%ig aus, bin jedoch der Meinung, das du den kompletten Computer-Pfad der Datei angeben musst.

Mit freundlichen Grüßen



TheRealLenon
10/17/2015 11:18 pioder#3
Quote:
Originally Posted by TheRealLenon View Post
Hallöchen,

Ich kenne mich mit Java nicht 100%ig aus, bin jedoch der Meinung, das du den kompletten Computer-Pfad der Datei angeben musst.

Mit freundlichen Grüßen



TheRealLenon
Daran liegt es nicht :D das ist soweit alles richtig
10/17/2015 14:17 algernong#4
Wenn ich printl durch println ersetze, und die {, } etwas anpasse, so dass ich es übersetzen kann, funktioniert das bei mir. Was genau geht bei dir nicht?
10/17/2015 17:02 pioder#5
Quote:
Originally Posted by algernong View Post
Wenn ich printl durch println ersetze, und die {, } etwas anpasse, so dass ich es übersetzen kann, funktioniert das bei mir. Was genau geht bei dir nicht?
....-MacBook-Pro:.....$ javac Joo.java
^[[AJoo.java:45: error: 'else' without 'if'
} else {
^
1 error
10/17/2015 17:06 Menan#6
Quote:
Originally Posted by pioder View Post
....-MacBook-Pro:.....$ javac Joo.java
^[[AJoo.java:45: error: 'else' without 'if'
} else {
^
1 error
Dann steht doch schon genau, was dein Fehler ist :facepalm:

Hier, der Code ist falsch, ist kein If statement...
Code:
synchronized (lock) {
                lock.wait();     
            } else {
                System.out.println("Haddeee Lan du willst keine Musik");
                break;        
                    }
10/17/2015 17:50 algernong#7
Quote:
Originally Posted by pioder View Post
....-MacBook-Pro:.....$ javac Joo.java
^[[AJoo.java:45: error: 'else' without 'if'
} else {
^
1 error
Achso, ich dachte, der Code macht nur nicht das, was er soll (und hast ihn dann irgendwie falsch hier her kopiert).

Solche Fehler hast du einige, hier sind alle korrigiert:
Code:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineEvent;
import java.io.File;
import java.util.Scanner;

public class Joo {

    public static void main(String[] args) throws Exception {

        //User Eingabe
        Scanner scanner = new Scanner (System.in);
        System.out.println("Drückste 1 sonst geschte weg mit 2");

        while (true) {
            System.out.println("Deine Eingabe");
            String eingabe = scanner.nextLine();

            // Eingabewert 1 spielt die musik ab
            if (Integer.parseInt(eingabe) == 1) {
                Object lock = new Object();
                // Spielt die .Wav Datei ab
                String soundFile = "/users/Mr.LongDong/desktop/Olexesh.wav";

                try (AudioInputStream ais = AudioSystem.getAudioInputStream(new File(soundFile))){

                    Clip clip = AudioSystem.getClip();
                    clip.open(ais);
                    clip.addLineListener((e) -> {
                        if (e.getType() == LineEvent.Type.STOP) {
                            synchronized (lock) {
                                lock.notify();
                            }
                        }
                    });

                    clip.start();
                }

                synchronized (lock) {
                    lock.wait();

                }
            }else {
                    System.out.println("Haddeee Lan du willst keine Musik");
                    break;
            }
        }
    }
}
Im Detail: System.out.printl gibt es nicht, sondern System.out.println.
Du hattest String.eingabe irgendwo. Nach dem synchronized Block hat ein } gefehlt, nach dem else Block hingegen war eins zu viel. Wenn du eine IDE nutzt kannst du Code automatisch einruecken lassen, dann fallen dir solche Fehler schneller auf.

Hier egal, aber im Allgemeinen solltest du statt notify() immer lieber notifyAll() verwenden. Denn notify() weckt ein beliebiges Thread auf, ohne dass du Einfluss nehmen kannst, welches. Also ist es immer besser, alle aufzuwecken, und unnoetig aufgewachte wieder schlafen zu legen (deswegen sollte wait() nur in einer Schleife vorkommen). Sobald mehrere Threads beteiligt sind, verursachen notify() und wait() ohne Schleife schnell Bugs. Hier aber egal, weil es ohnehin nur ein schlafendes Thread gibt.
10/17/2015 18:25 pioder#8
Quote:
Originally Posted by Menan View Post
Dann steht doch schon genau, was dein Fehler ist :facepalm:

Hier, der Code ist falsch, ist kein If statement...
Code:
synchronized (lock) {
                lock.wait();     
            } else {
                System.out.println("Haddeee Lan du willst keine Musik");
                break;        
                    }

Bin relativ neu in Java und hab nicht viel Dunst davon...


Quote:
Originally Posted by algernong View Post
Achso, ich dachte, der Code macht nur nicht das, was er soll (und hast ihn dann irgendwie falsch hier her kopiert).

Solche Fehler hast du einige, hier sind alle korrigiert:
Code:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineEvent;
import java.io.File;
import java.util.Scanner;

public class Joo {

    public static void main(String[] args) throws Exception {

        //User Eingabe
        Scanner scanner = new Scanner (System.in);
        System.out.println("Drückste 1 sonst geschte weg mit 2");

        while (true) {
            System.out.println("Deine Eingabe");
            String eingabe = scanner.nextLine();

            // Eingabewert 1 spielt die musik ab
            if (Integer.parseInt(eingabe) == 1) {
                Object lock = new Object();
                // Spielt die .Wav Datei ab
                String soundFile = "/users/Mr.LongDong/desktop/Olexesh.wav";

                try (AudioInputStream ais = AudioSystem.getAudioInputStream(new File(soundFile))){

                    Clip clip = AudioSystem.getClip();
                    clip.open(ais);
                    clip.addLineListener((e) -> {
                        if (e.getType() == LineEvent.Type.STOP) {
                            synchronized (lock) {
                                lock.notify();
                            }
                        }
                    });

                    clip.start();
                }

                synchronized (lock) {
                    lock.wait();

                }
            }else {
                    System.out.println("Haddeee Lan du willst keine Musik");
                    break;
            }
        }
    }
}
Im Detail: System.out.printl gibt es nicht, sondern System.out.println.
Du hattest String.eingabe irgendwo. Nach dem synchronized Block hat ein } gefehlt, nach dem else Block hingegen war eins zu viel. Wenn du eine IDE nutzt kannst du Code automatisch einruecken lassen, dann fallen dir solche Fehler schneller auf.

Hier egal, aber im Allgemeinen solltest du statt notify() immer lieber notifyAll() verwenden. Denn notify() weckt ein beliebiges Thread auf, ohne dass du Einfluss nehmen kannst, welches. Also ist es immer besser, alle aufzuwecken, und unnoetig aufgewachte wieder schlafen zu legen (deswegen sollte wait() nur in einer Schleife vorkommen). Sobald mehrere Threads beteiligt sind, verursachen notify() und wait() ohne Schleife schnell Bugs. Hier aber egal, weil es ohnehin nur ein schlafendes Thread gibt.
Danke dir :), bin bloß dabei die Sprache zu erlernen und da sind solche Fehler ganz normal :D
10/18/2015 09:54 ComputerBaer#9
Dann solltest du dir auch die Zeit nehmen und die Fehlermeldungen lesen. Java sagt eigentlich immer ziemlich deutlich was nicht stimmt. Da habe ich schon schlimmere Sprachen gesehen, bei denen es nur einen eher kryptischen Fehlercode gibt und die angegebene Zeile nur selten den Fehler enthält.

Der Fehler "'else' without 'if'" ist ziemlich leicht zu verstehen, frei übersetzt könnte man sagen "Du hast ein 'else', aber du hast kein 'if'". Ein 'else' muss immer ein 'if' haben, ein 'if' muss aber kein 'else' haben.

Und zu "ganz normal": Mir sind solche Fehler nicht ein mal am Anfang passiert, aber vielleicht bin ich ja auch nicht "normal".
10/18/2015 12:31 pioder#10
Quote:
Originally Posted by ComputerBaer View Post
Dann solltest du dir auch die Zeit nehmen und die Fehlermeldungen lesen. Java sagt eigentlich immer ziemlich deutlich was nicht stimmt. Da habe ich schon schlimmere Sprachen gesehen, bei denen es nur einen eher kryptischen Fehlercode gibt und die angegebene Zeile nur selten den Fehler enthält.

Der Fehler "'else' without 'if'" ist ziemlich leicht zu verstehen, frei übersetzt könnte man sagen "Du hast ein 'else', aber du hast kein 'if'". Ein 'else' muss immer ein 'if' haben, ein 'if' muss aber kein 'else' haben.

Und zu "ganz normal": Mir sind solche Fehler nicht ein mal am Anfang passiert, aber vielleicht bin ich ja auch nicht "normal".
Du bist nicht normal :awesome: ich habe den Theard nach der Vorlesung erstellt und da war mein Kopf nicht mehr zum Denken zu gebrauchen :D
10/21/2015 09:04 TheRealLenon#11
Mit dem, dass ein else immer ein if enthalten muss, kann ich dir leider nicht zustimmen.

ein else muss nicht immer ein if enthalten.

Hier ein Ausschnitt aus meinem Code.. Dort funktioniert das else auch ohne das else if.

Code:
	if (einfach.equals("Illegale Geschäfte")) {
					JOptionPane.showMessageDialog(null,
							"Du hast in illegale Geschäfte investiert. Dein Kapital erhöht sich um 6 Credits.");

					JOptionPane.showMessageDialog(null, "Dein Kapital beträgt nun: " + (startergeldEinfach + 6));
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
					++startergeldEinfach;
				}

				else {
					JOptionPane.showMessageDialog(null,
							"Bitte wähle eins der zur Verfügung stehenden Investitionen aus.");
}

Mit freundlichen Grüßen



TheRealLenon
10/21/2015 09:49 ComputerBaer#12
Quote:
Originally Posted by TheRealLenon View Post
Mit dem, dass ein else immer ein if enthalten muss, kann ich dir leider nicht zustimmen.
Ich glaube da hast du mich falsch verstanden.


Um noch kurz auf dein "else if" einzugehen ...

10/21/2015 11:32 TheRealLenon#13
Nun habe ich es verstanden. Der if block liegt in der Schleife. Da die schleife aber geschlossen wurde, geht ein else natürlich nicht. Ich dachte, das der else Block noch in der Schleife integriert war.

Grüße



TheRealLenon
10/21/2015 11:37 XYZ-Cannon#14
Quote:
Originally Posted by TheRealLenon View Post
Nun habe ich es verstanden. Der if block liegt in der Schleife. Da die schleife aber geschlossen wurde, geht ein else natürlich nicht. Ich dachte, das der else Block noch in der Schleife integriert war.

Grüße



TheRealLenon
If/else hat nichts mit Schleifen zu tun.

Bei der If Bedingung geht es nur darum, dass WENN ein bestimmter Zustand eintritt, ein in den Klammern liegender Codeblock ausgeführt ist. ELSE bedeutet dann nichts anderes, dass falls die IF Bedingung nicht zutrifft, ANSONSTEN der in dem else Block geschriebene Code ausgeführt wird.

Code:
if (true) {
//do something 
}
else {
//do something else
}
Das ein else dadurch nicht alleine stehen kann ist alleine im Sprachgebrauch schon logisch. Wenn es kein WENN gibt, gibt es auch kein ANSONSTEN.
10/21/2015 14:35 TheRealLenon#15
Quote:
Originally Posted by ComputerBaer View Post
Dann solltest du dir auch die Zeit nehmen und die Fehlermeldungen lesen. Java sagt eigentlich immer ziemlich deutlich was nicht stimmt. Da habe ich schon schlimmere Sprachen gesehen, bei denen es nur einen eher kryptischen Fehlercode gibt und die angegebene Zeile nur selten den Fehler enthält.

Der Fehler "'else' without 'if'" ist ziemlich leicht zu verstehen, frei übersetzt könnte man sagen "Du hast ein 'else', aber du hast kein 'if'". Ein 'else' muss immer ein 'if' haben, ein 'if' muss aber kein 'else' haben.

Und zu "ganz normal": Mir sind solche Fehler nicht ein mal am Anfang passiert, aber vielleicht bin ich ja auch nicht "normal".
Quote:
Originally Posted by XYZ-Cannon View Post
If/else hat nichts mit Schleifen zu tun.

Bei der If Bedingung geht es nur darum, dass WENN ein bestimmter Zustand eintritt, ein in den Klammern liegender Codeblock ausgeführt ist. ELSE bedeutet dann nichts anderes, dass falls die IF Bedingung nicht zutrifft, ANSONSTEN der in dem else Block geschriebene Code ausgeführt wird.

Code:
if (true) {
//do something 
}
else {
//do something else
}
Das ein else dadurch nicht alleine stehen kann ist alleine im Sprachgebrauch schon logisch. Wenn es kein WENN gibt, gibt es auch kein ANSONSTEN.
Das war mir klar.. Nur das mit dem ein else kann nicht alleine stehen, hat mich total verwirrt.. :o