Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω μια εργασία για την σχολή η οποία λέει να φτιάξουμε έναν mp3 player σε γλώσσα java και την χρήση NetBeans

Έψαξα να βρω πως να το κάνω με βιντεάκια στο youtube κλπ.Και έπεσα σε αυτό

 

το δοκίμασα,το έτρεξα.Έβαλα κουμπιά ώστε να παίζει όποτε το θέλει ο χρήστης.Το 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 λάθη που γίνονται;

Ευχαριστώ προκαταβολικά

Δημοσ.

άκυρο παιδιά.βρήκα ένα άλλο παράδειγμα.το προσάρμοσα στα μέτρα μου και συνεχίζω με τα υπόλοιπα.Αν χρειαστώ κάποια άλλη βοήθεια θα σας πω.Ευχαριστώ :)

Δημοσ.

Νέο πρόβλημα.Ένα απο τα πακέτα έχει την δυνατότητα να μετράει τα 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);" είναι το πρόβλημα.Αν χρειάζεται να γράψω όλον τον κώδικα η να πω κάτι άλλο πείτε μου.

Ευχαριστώ!

Δημοσ.

Ισχύει ότι: "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.

Δημοσ.

>    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 αυτήν την μέθοδο ο τυπάς που έφτιαξε την βιβλιοθήκη;

Δημοσ.

Δεν θα έπρεπε να καλείς

>int frames = player.countFrames(file);

αντί για

>int frames = player2.countFrames(file);

; Η μεταβλητή player είναι τύπου AdvancedPlayer ενώ η player2 είναι Converter.

 

Τι είναι το

>Converter()

;

Δημοσ.

Ίσως δεν έχω καταλάβει καλά αλλά μέχρι στιγμής έχω διακρίνει δυο μικρά "ουπς τι είναι αυτό;".

 

>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 μέθοδο.

Δημοσ.

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

>        	}

>		}

>}

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...