Meraklis56 Δημοσ. 3 Ιανουαρίου 2012 Δημοσ. 3 Ιανουαρίου 2012 Έχω μια εργασία για την σχολή η οποία λέει να φτιάξουμε έναν mp3 player σε γλώσσα java και την χρήση NetBeans Έψαξα να βρω πως να το κάνω με βιντεάκια στο youtube κλπ.Και έπεσα σε αυτό http://www.youtube.com/watch?v=655reawVe9M&feature=related το δοκίμασα,το έτρεξα.Έβαλα κουμπιά ώστε να παίζει όποτε το θέλει ο χρήστης.Το play έπαιζε,το stop για κάποιον λόγο όχι. >public void run() { int i = 0; do{ try{ FileInputStream file=new FileInputStream("E:\\04.Skrillex - Fucking Die 2 (Cooper Mix).mp3"); playmp3 = new AdvancedPlayer(file); playmp3.play(); } catch (Exception e){ } }while(i<10); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { (new Thread(new Welcome())).start(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { playmp3.stop(); } το playmp3 είναι δηλωμένο πιο κάτω με αυτήν την εντολή >AdvancedPlayer playmp3; το λινκ με το api είναι: http://www.javazoom.net/javalayer/docs/docs1.0/javazoom/jl/player/advanced/AdvancedPlayer.html#AdvancedPlayer(java.io.InputStream) Είπα να δοκιμάσω με άλλη βιβλιοθήκη.Βρήκα την jlgui. Τώρα το πρόβλημα είναι οτι δεν παίζει το κομμάτι καν.Και μιας που δεν έχω κάποα ιδιαίτερη εμπειρία με την java θα ήθελα τη βοήθεια σας. > public static void main(String[] args) { new Welcome().setVisible(true); int i=0; do{ try{ FileInputStream file=new FileInputStream("E:\\04.Skrillex - Fucking Die 2 (Cooper Mix).mp3"); BasicPlayer playmp3 = new BasicPlayer(); playmp3.open(file); playmp3.play(); } catch(Exception e){} } while(i<10); } λινκ http://www.javazoom.net/jlgui/docs/docs2.1.1/index.html το σφάλμα είναι >Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at javazoom.jlgui.basicplayer.BasicPlayer.<clinit>(Unknown Source) at java2smp3.Java2smp3.main(Java2smp3.java:25) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 2 more Μπορείτε να βρείτε κάποιο απο τα 2 λάθη που γίνονται; Ευχαριστώ προκαταβολικά
nexuss Δημοσ. 3 Ιανουαρίου 2012 Δημοσ. 3 Ιανουαρίου 2012 Έχεις ελέγξει αρχικά ότι έχεις φορτώσει όλα τα απαραίτητα jar αρχεία στο project σου;
Meraklis56 Δημοσ. 3 Ιανουαρίου 2012 Μέλος Δημοσ. 3 Ιανουαρίου 2012 ναι. Άλλωστε αν δε το είχα κάνει θα χτυπούσε σε πολλές εντολές.
GKNSB Δημοσ. 3 Ιανουαρίου 2012 Δημοσ. 3 Ιανουαρίου 2012 Αν δεν δούμε όλο τον κώδικα σου είναι λίγο χλωμό να βγάλουμε άκρη.
Meraklis56 Δημοσ. 3 Ιανουαρίου 2012 Μέλος Δημοσ. 3 Ιανουαρίου 2012 άκυρο παιδιά.βρήκα ένα άλλο παράδειγμα.το προσάρμοσα στα μέτρα μου και συνεχίζω με τα υπόλοιπα.Αν χρειαστώ κάποια άλλη βοήθεια θα σας πω.Ευχαριστώ
Meraklis56 Δημοσ. 5 Ιανουαρίου 2012 Μέλος Δημοσ. 5 Ιανουαρίου 2012 Νέο πρόβλημα.Ένα απο τα πακέτα έχει την δυνατότητα να μετράει τα frames ενός mp3. όλα μια χαρά,εισάγω το πακέτο,μόνο που η συγκεκριμένη μέθοδος του πακέτου είναι protected.Γίνεται με κάποιον τρόπο να το παραβλέψω; > public class MP3 { private String filename; private AdvancedPlayer player; // constructor that takes the name of an MP3 file public MP3(String filename) { this.filename = filename; } public void close() { if (player != null) player.close(); } // play the MP3 file to the sound card public void play() { try { FileInputStream file = new FileInputStream(filename); player = new AdvancedPlayer(file); player2 = new Converter(); int frames = player2.countFrames(file); } catch (Exception e) { System.out.println("Problem playing file " + filename); System.out.println(e); } // run in new thread to play in background new Thread() { public void run() { try { player.play(); } catch (Exception e) { System.out.println(e); } } }.start(); }} εκεί που γράφει "int frames = player2.countFrames(file);" είναι το πρόβλημα.Αν χρειάζεται να γράψω όλον τον κώδικα η να πω κάτι άλλο πείτε μου. Ευχαριστώ!
Επισκέπτης Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Ισχύει ότι: "A protected method can be called by any subclass within its class, but not by unreleated classes.". Επίσης, νομίζω ότι μπορείς να έχεις πρόσβαση στη μέθοδο από άλλες κλάσεις του ίδιου πακέτου. Αυτό που θα πρότεινα να δοκιμάσεις είναι να ορίσεις μια κλάση "MyAdvancedPlayer extends AdvancedPlayer" και να κάνεις override την μέθοδο σε public. (Μια μικρή επιφύλαξη ότι επιτρέπεται.) Μετά, μπορείς να καλέσεις τη μέθοδο της MyAdvancedPlayer. Αν το παραπάνω δεν επιτρέπεται (override από protected σε public) ένα κολπάκι ισως να ήταν να ορίσεις το MyAdvancedPlayer να ανήκει στο πακέτο της AdvancedPlayer και να κάνεις encapsulation ενός αντικειμένου AdvancedPlayer.
nakayama Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Δοκίμασε με protected String filename; protected AdvancedPlayer player;
Meraklis56 Δημοσ. 5 Ιανουαρίου 2012 Μέλος Δημοσ. 5 Ιανουαρίου 2012 > class MyAdvancedPlayer extends AdvancedPlayer{ private String filename; private AdvancedPlayer player; public MyAdvancedPlayer(InputStream in) throws JavaLayerException { super(in); try { FileInputStream file = new FileInputStream(filename); player = new AdvancedPlayer(file); player2 = new Converter(); int frames = player2.countFrames(file); } catch (Exception e) { System.out.println("Problem playing file " + filename); System.out.println(e); } } } αυτό έκανα,πάλι το πρόβλημα παραμένει.Protected μέθοδο nakayama δοκίμασα και με protected αλλά πάλι :/ γιατί αλήθεια να την έχει δηλώσει protected αυτήν την μέθοδο ο τυπάς που έφτιαξε την βιβλιοθήκη;
nakayama Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Δοκίμασε να κάνεις ένα printStackTrace από το Exception για να δούμε που ακριβώς υπάρχει το πρόβλλημα
Επισκέπτης Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Δεν θα έπρεπε να καλείς >int frames = player.countFrames(file); αντί για >int frames = player2.countFrames(file); ; Η μεταβλητή player είναι τύπου AdvancedPlayer ενώ η player2 είναι Converter. Τι είναι το >Converter() ;
nakayama Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Στο jdk έχεις όλα τα jars, για αυτό και δεν χτυπάει όταν κάνεις compile Δες και στον jre εαν υπάρχουν τα jars.
nexuss Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 Ίσως δεν έχω καταλάβει καλά αλλά μέχρι στιγμής έχω διακρίνει δυο μικρά "ουπς τι είναι αυτό;". >class MyAdvancedPlayer extends AdvancedPlayer{ private String filename; private AdvancedPlayer player; public MyAdvancedPlayer(InputStream in) throws JavaLayerException { super(in); try { FileInputStream file = new FileInputStream(filename); player = new AdvancedPlayer(file); player2 = new Converter(); int frames = player2.countFrames(file); } catch (Exception e) { System.out.println("Problem playing file " + filename); System.out.println(e); } } } Εδώ Meraklis56 έχεις κάνει απλά extend την κλάση AdvancedPlayer χωρίς να έχεις κάνει override τη μέθοδο που θέλεις, η οποία στην προκειμένη περίπτωση είναι η countFrames. Οπότε θα πρέπει η κλάση σου MyAdvancedPlayer να είναι κάπως έτσι >class MyAdvancedPlayer extends AdvancedPlayer{ private String filename; private AdvancedPlayer player; public MyAdvancedPlayer(InputStream in) throws JavaLayerException { super(in); try { FileInputStream file = new FileInputStream(filename); player = new AdvancedPlayer(file); player2 = new Converter(); int frames = player2.countFrames(file); } public int countFrames(InputStream s) { //to-do code here } catch (Exception e) { System.out.println("Problem playing file " + filename); System.out.println(e); } } } Ίσως να μην είναι έτσι η υπογραφή της countFrames αλλά φαντάζομαι κατάλαβες τι πρέπει να κάνεις. Το δεύτερο ουπς είναι αυτό που είπε και ο bdarla, ότι δηλαδή χρησιμοποιείς τη μεταβλητή player2, η οποία δεν υπάρχει πουθενά αλλού στον κώδικα που μας έδωσες, αντί για τη μεταβλητή player. Μήπως υπάρχει κάποιο λάθος με τις μεταβλητές σου; Ίσως αν λύσεις αυτό να μη χρειαστεί να λύσεις και το πρόβλημα με την protected μέθοδο.
nakayama Δημοσ. 5 Ιανουαρίου 2012 Δημοσ. 5 Ιανουαρίου 2012 H protected μέθοδος επιστρέφει πάντα -1 O player2 είναι Converter >import java.io.*; >import javazoom.jl.player.*; >import javazoom.jl.converter.*; >import javazoom.jl.decoder.*; >import javazoom.jl.player.advanced.*; >public class MyAdvancedPlayer extends AdvancedPlayer >{ > protected String filename; > protected AdvancedPlayer player; > protected Converter player2; > protected int frames; > protected FileInputStream file; > public MyAdvancedPlayer(InputStream in) throws JavaLayerException > { > super(in); > try > { > file = new FileInputStream(filename); > player = new AdvancedPlayer(file); > player2 = new Converter(); > //Epistrefei panta -1 frames = player2.countFrames(file); > } > catch (Exception e) { > System.out.println("Problem playing file " + filename); > System.out.println(e); > } > } >}
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα