myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Wav-Player für Java

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 22.06.10, 20:39   #1
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard Wav-Player für Java

Hallo.
In meinem Informatikkurs programmieren wir momentan ein Textadventure in Java.
Nun würde ich da gerne im Hintergrund Musik laufen lassen. Also suche ich eine Klasse die *.wav Dateien abspielt.

Habe auch schon über Google gesucht, aber nichts gefunden was funktioniert hat bzw. bei einer Klasse meckert der Java-Editor immer wegen non-static und static rum. Ich hab keine Ahnung wie ich das umgehen kann.
Wenn ich die Methode zum abspielen der Datei aufrufe beschwert sich der Editor darüber, dass die Methode non-static ist, aber der Rest eben static. Ein Problem, welches irgendwie immer bei Java auftritt...so kommt es mir jedenfalls vor.

Hat wer einen Vorschlag oder eine funktionierende Klasse?

Gruß
Aranval
Aranval ist offline   Mit Zitat antworten
Ungelesen 22.06.10, 20:51   #2
bugfix
get shocked....
 
Benutzerbild von bugfix
 
Registriert seit: Nov 2009
Beiträge: 367
Bedankt: 443
bugfix ist noch neu hier! | 0 Respekt Punkte
Standard

hab bissal geguggt hoffendlich hilft dir das weiter

für wave
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

bedanken wäre nett!

greetz
__________________
bugfix ist offline   Mit Zitat antworten
Ungelesen 22.06.10, 21:05   #3
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard

Diese Klasse habe ich auch schon gefunden, trotzdem danke. Sie funktioniert nur leider nicht =(
Folgende Fehlermeldung erscheint:
GUI.java:314:15: non-static method run() cannot be referenced from a static context
AePlayWave.run();

Hat wer ne Idee wie man das lösen könnte?

Vielleicht helfen ein paar weitere Informationen:
Wenn ich das Programm starte wird ein Fenster geöffnet mit verschiedenen Buttons. Wenn ich auf den "Start"-Button drücke, soll unter anderem der Sound abgespielt werden.
Aranval ist offline   Mit Zitat antworten
Ungelesen 22.06.10, 21:36   #4
Afro
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 10
Bedankt: 0
Afro ist noch neu hier! | 0 Respekt Punkte
Standard

Ich hab die Klasse gerade mal getestet und funktioniert. Daher würde ich annehmen dass du bei der Implementierung ihrgendwas falsch machst. Vielleicht postest du mal einen Quellcode ausschnitt.
Afro ist offline   Mit Zitat antworten
Ungelesen 22.06.10, 22:42   #5
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard

Okay, hier ist er:
Zitat:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class GUI extends JFrame {
// Anfang Attribute
Spiel Spiel = new Spiel();
private JTextArea Area = new JTextArea("");
private Bildanzeige Bild = new Bildanzeige("Bilder/Testbild.jpg");
private JButton Vorne = new JButton();
private JButton Links = new JButton();
private JButton Rechts = new JButton();
private JButton Hinten = new JButton();
private JButton Hoch = new JButton();
private JButton Runter = new JButton();
private JButton Aktion1 = new JButton();
private JButton Aktion2 = new JButton();
private JButton Aktion3 = new JButton();
private JButton Aktion4 = new JButton();
private JButton Aktion5 = new JButton();
private JButton Inventar = new JButton();
private JButton Notizbuch = new JButton();

private String[] jList1Data = {};
private JList InventarListe = new JList(jList1Data);
private String[] jList2Data = {};
private JList NotizListe = new JList(jList2Data);
private JButton Start = new JButton();
// Ende Attribute

public GUI(String title)
{
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE);
int frameWidth = 1200;
int frameHeight = 750;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);


// Anfang Komponenten

[Die Komponenten hab ich mal rausgeschnitten..sind nur Buttons, Textareas usw.]


////////////////////// Anfang Methoden \\\\\\\\\\\\\\\\\\\\\\\\\\

[Habe auch hier alle Methoden entfernt die nichts mit meinem Problem zu tun haben]

//
public void Start_ActionPerformed(ActionEvent evt) {
//Buttons aktivieren
Vorne.setEnabled(true);
Hinten.setEnabled(true);
Rechts.setEnabled(true);
Links.setEnabled(true);
Hoch.setEnabled(true);
Runter.setEnabled(true);
Inventar.setEnabled(true);
Notizbuch.setEnabled(true);
Aktion1.setEnabled(true);
Aktion2.setEnabled(true);
Aktion3.setEnabled(true);
Aktion4.setEnabled(true);
Aktion5.setEnabled(true);
Start.setEnabled(false);

//Musik starten
AePlayWave.run();



//Raum 1 aktivieren

Spiel.aktuellerOrt = Spiel.Raum1;
// Bild.anzeigen(Spiel.Raum1.Bild);
Area.setText(Spiel.aktuellerOrt.Beschreibung1 + "\n");
Area.append(Spiel.aktuellerOrt.Beschreibung2 + "\n");
Area.append(Spiel.aktuellerOrt.Beschreibung3 + "\n");
}

// Ende Methoden

public static void main(String[] args) {
new GUI("GUI");
}
}
Aranval ist offline   Mit Zitat antworten
Ungelesen 22.06.10, 23:44   #6
Afro
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 10
Bedankt: 0
Afro ist noch neu hier! | 0 Respekt Punkte
Standard

Ah Ok, ich weis jetzt nicht inwiefern du dich mit Threading in Java auseinandergesetzt hast aber hier mal eine kleine Erläuterung.Die Klasse AePlayWave erweitert die Klasse Thread, Threads haben in Java immer eine run()-Methode die wenn richtig verwendet , nebenläufig ausgeführt werden.
Was du versucht ist eine statische Methode der Klasse AePlayWave namens run() aufzurufen, die es jedoch nicht gibt. Richtig wäre

...
//Musik starten
new AePlayWave("deine_wav.wav").start();
...
Via start() wird der Thread in den Zustand runnable versetzt. Wie und wann genau die run() Methode aufgerufen wird entscheidet der sogennante Scheduler der die auf deinem System laufenden Threads organisiert. Genaueres kann man ja bei Bedarf nachlesen, aber so müsste es klappen.
Afro ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 00:12   #7
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard

Vielen Dank, die Zeile hat er schon mal geschluckt =)

Bin was Java angeht ein ziemlicher Anfänger. Habe erst seit ca. 1 Jahr Informatik und wir machen immer nur sehr bescheidene Fortschritte.

Wie kann ich jetzt also erreichen, dass die Soundfile im Programm selbst abgespielt wird, wenn ich den entsprechenden Button drücke?
Aranval ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 15:37   #8
Afro
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 10
Bedankt: 0
Afro ist noch neu hier! | 0 Respekt Punkte
Standard

Wenn ich dich richtig verstanden habe , willst du wissen wie man generell auf Button-Events reagiert.
Normalerweise benutzt man in Java dafür einen ActionListener, es gibt zwar verschiedene richtige Wege diesen zu implementieren aber für genaueres kannst du ja bei Bedarf NAchlesen.
Da ich bei mir an der Uni ein Tutorium in Objektorientierter Pogrammierung gebe hab ich einige Beispiele dazu, eines davon hab ich mal für dich soweit umgeschrieben das bei Knopfdruck eine Wav abgespielt wird. Hoffe das löst dein Problem komplett.
Zitat:
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Player
extends JFrame
implements ActionListener {
private static final long serialVersionUID = 1L;

public Player() {
super();
createAll();
setVisible(true);
}

private void createAll() {
// Create Objects
setTitle("WavPlayer");
JButton playButton = new JButton("Play");
JButton endButton = new JButton("End");
Container content = getContentPane();
// Add listeners
playButton.setActionCommand("play");
endButton.setActionCommand("end");
playButton.addActionListener(this);
endButton.addActionListener(this);
// Organize layout
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
content.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1; constraints.weighty = 1;
constraints.insets = new Insets(5, 5, 5, 5);
content.add(playButton, constraints);
constraints.gridy = 1; constraints.weighty = 0;
content.add(endButton, constraints);
}

@Override
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if(command.equals("play")) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));
fileChooser.setDialogTitle("Datei öffnen");
FileNameExtensionFilter filter = new FileNameExtensionFilter(".wav", "wav");
fileChooser.setFileFilter(filter);
int selected = fileChooser.showDialog(this, "Öffnen");
if (selected == JFileChooser.APPROVE_OPTION)
new AePlayWave(fileChooser.getSelectedFile().getAbsolu tePath()).start();

}
else if(command.equals("end")) {
dispose();
System.exit(0);
}
}

public static void main(String[] args) {
new Player();
}
}
Afro ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 17:31   #9
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Wenn ich dich richtig verstanden habe , willst du wissen wie man generell auf Button-Events reagiert.
Kann man so sagen. Ich will, dass beim Starten des Spiels (durch den Button) auch die Musik gestartet wird.

Vielen Dank für deine Player-Klasse.
Ich habe mal versucht Sachen daraus in mein UI zu übernehmen.. leider klappt das nicht so ganz :/
Hier einige Fehlermeldungen:
Hier habe ich an mein UI "implements ActionListener" anzuhängen.
Zitat:
GUI.java:27:8: GUI is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener
public class GUI extends JFrame implements ActionListener{
_____^___________________________________________
Ich habe bei mir den playButton in meinen Start Button umbenannt.
Zitat:
GUI.java:193:10: addActionListener(java.awt.event.ActionListener) in javax.swing.AbstractButton cannot be applied to (GUI)
Start.addActionListener(this);

Dann habe ich auch mal testweise deine Klasse so übernommen und mit dem JavaEditor erstellt. Beim kompilieren kommt das hier:
Zitat:
Player.java:61:5: cannot find symbol
symbol : class AePlayWave
location: class Player
new AePlayWave(fileChooser.getSelectedFile().getAbsolu tePath()).start();

Mir sagen die ganzen Fehlermeldungen leider überhaupt nix =(
Was habe ich falsch gemacht?
Aranval ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 18:30   #10
Afro
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 10
Bedankt: 0
Afro ist noch neu hier! | 0 Respekt Punkte
Standard

Erstmal wäre es gut zu wissen ob bzw. mit welcher IDE du arbeitest.
Desweiteren merkt man bei dir, das es an den Grundlagen in der Java Programmierung fehlt, soll keine Kritik sein und du hast ja selber gesagt das du Java bezüglich noch Anfänger bist. Z.B merkt man das du nicht weist was eine Abstrakte Klasse oder ein Interface ist was jedoch eine Vorraussetzung für die GUI Programmierung ist. Daher ein gutgemeinter Rat von mir, nochmal die Java Grundlagen zu wiederholen bevor du erweiternde Themen angreifst. Jedoch helf ich trotzdem gerne und hier zu deinen Problemen.

Zitat:
GUI.java:27:8: GUI is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener
public class GUI extends JFrame implements ActionListener{
Bedeutet das du ein Interface implementiert hast jedoch die dazugehörigen Methoden nicht. In diesem Falle wäre eine Möglichkeit die Klasse als Abstrakt zu deklarieren, was jedoch nicht in deinem Sinne ist. Wie du in meine Bsp. siehst habe ich eine Methode
Zitat:
public void actionPerformed(ActionEvent event)
welche eine Klasse die nicht Abstrakt jedoch einen ActionListener implementiert unbedingt braucht.

Zitat:
Player.java:61:5: cannot find symbol
symbol : class AePlayWave
location: class Player
new AePlayWave(fileChooser.getSelectedFile().getAbsolu tePath()).start();
Bedeutet das die Klasse AePlayWave nicht gefunden wird. Eine Lösung wäre die beiden Klassen in dem selben Paket zu halten bzw. eine entsprechende import Anweisung zu schreiben
(hier kann dir eine gute IDE sehr viel Arbeit abnehmen, wobei ich auch der Meinung bin das man alles was einem eine IDE an Arbeit abnimmt auch ohne können sollte).
Afro ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 18:57   #11
Aranval
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 10
Bedankt: 0
Aranval ist noch neu hier! | 0 Respekt Punkte
Standard

Joa das kann gut sein, dass mir da Grundlagen fehlen. Ich nehm das auch nicht als Kritik, weil es einfach stimmt. Ich kann nur das, was uns unser Lehrer uns beigebracht hat und das Ergebnis sieht man ja hier
Der kann auch nicht wirklich viel...

Ich versuch einfach die Projekte mit "größeren" Klassen aufzupeppen. Eigentlich klappt das mit Google immer ganz gut...aber natürlich mit Ausnahmen. Von daher weiß ich nicht, ob ich da jetzt weiter dran bleiben will oder es einfach lasse...

Was würdest du mir raten?^^
Dran bleiben oder sein lassen
Aranval ist offline   Mit Zitat antworten
Ungelesen 23.06.10, 19:18   #12
Afro
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 10
Bedankt: 0
Afro ist noch neu hier! | 0 Respekt Punkte
Standard

Kommt immer darauf an welche Interessen der jeweilige hat.
Wenn es darum geht das du das Programmieren als zu schwierig empfindest würde ich sagen, dran bleiben sieht manchmal schwieriger aus als es eigentlich ist.
Meine Empfehlung, einfach mal ein Buch schnappen und von vorne durcharbeiten.
Ich persöhnlich arbeite gern mit den Java Tutorials von Sun.
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Afro ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.


Sitemap

().