Otra dudita con JAVA
Hola otra vez... Esta vez también vengo con lo del sonido en JAVA, ¿ya yo instale el JMF para reproducir los .wma y .mp3 y esas cosas pero lo que se me descargo es un .exe
no se supone que se debería bajar un .jar? ¿Para después meterlo con las otras librerías de JAVA o como hago ahora después de que instale el JMF?
Porque igual si coloco extensiones .wma me da error
Gracias de antemano
no se supone que se debería bajar un .jar? ¿Para después meterlo con las otras librerías de JAVA o como hago ahora después de que instale el JMF?
Porque igual si coloco extensiones .wma me da error
Gracias de antemano
1 respuesta
Respuesta de krlosnow
1
1
krlosnow, Mas de 15 años de experiencia en Java, Javascript y HTML
El ejecutable lo que hace es descomprimirte todas las librerías y ejemplos. Una vez que hayas instalado el JMF en una ubicación, busca en la carpeta "lib" y seguramente ahí estarán todos los jar's
hola otra vez....mira otra vez con lo del sonido....xD
ya hice lo q dijistes descarge el JMF, encontre la carpeta "lib" con los jar la importe y todo perfecto pero me da un error y lo mas seguro es en la ruta q le estoy pasando para q busque el sonido....mira este es el ejemplo q estoy utilizando uno q me distes hace tiempo
import javax.media.*;
import java.io.*;
import java.net.URL;
class mp3 extends Thread
{
private URL url;
private MediaLocator mediaLocator;
private Player playMP3;
public mp3(String mp3)
{
try{
this.url = new URL(mp3);
}catch(java.net.MalformedURLException e)
{System.out.println(e.getMessage());}
}
public void run()
{
try{
mediaLocator = new MediaLocator(url);
playMP3 = Manager.createPlayer(mediaLocator);
}catch(java.io.IOException e)
{System.out.println(e.getMessage());
}catch(javax.media.NoPlayerException e)
{System.out.println(e.getMessage());}
playMP3.addControllerListener(new ControllerListener()
{
public void controllerUpdate(ControllerEvent e)
{
if (e instanceof EndOfMediaEvent)
{
playMP3.stop();
playMP3.close();
}
}
}
);
playMP3.realize();
playMP3.start();
}
}
public class playmp3{
public static void main(String[] args)
{
mp3 t = new mp3("file:///C://JavaApplications//cd.mp3");
t.start();
}
}
me da este error
unknown protocol: c
Exception in thread "Thread-0" java.lang.NullPointerException
at javax.media.MediaLocator.<init>(MediaLocator.java:37)
at mp3.run(mp3.java:25)
y me señala esta linea
mediaLocator = new MediaLocator(url);
y esta es la ruta q le estoy pasando
C://Users//Public//Music//Sample Music//hola.mp3
queria saber si sabes la forma correcta de pasarle la ruta o si ese no es el error como lo puedo solucionar
gracias de antemano
ya hice lo q dijistes descarge el JMF, encontre la carpeta "lib" con los jar la importe y todo perfecto pero me da un error y lo mas seguro es en la ruta q le estoy pasando para q busque el sonido....mira este es el ejemplo q estoy utilizando uno q me distes hace tiempo
import javax.media.*;
import java.io.*;
import java.net.URL;
class mp3 extends Thread
{
private URL url;
private MediaLocator mediaLocator;
private Player playMP3;
public mp3(String mp3)
{
try{
this.url = new URL(mp3);
}catch(java.net.MalformedURLException e)
{System.out.println(e.getMessage());}
}
public void run()
{
try{
mediaLocator = new MediaLocator(url);
playMP3 = Manager.createPlayer(mediaLocator);
}catch(java.io.IOException e)
{System.out.println(e.getMessage());
}catch(javax.media.NoPlayerException e)
{System.out.println(e.getMessage());}
playMP3.addControllerListener(new ControllerListener()
{
public void controllerUpdate(ControllerEvent e)
{
if (e instanceof EndOfMediaEvent)
{
playMP3.stop();
playMP3.close();
}
}
}
);
playMP3.realize();
playMP3.start();
}
}
public class playmp3{
public static void main(String[] args)
{
mp3 t = new mp3("file:///C://JavaApplications//cd.mp3");
t.start();
}
}
me da este error
unknown protocol: c
Exception in thread "Thread-0" java.lang.NullPointerException
at javax.media.MediaLocator.<init>(MediaLocator.java:37)
at mp3.run(mp3.java:25)
y me señala esta linea
mediaLocator = new MediaLocator(url);
y esta es la ruta q le estoy pasando
C://Users//Public//Music//Sample Music//hola.mp3
queria saber si sabes la forma correcta de pasarle la ruta o si ese no es el error como lo puedo solucionar
gracias de antemano
Tienes que pasar una URL válida, indicando el protocolo al principio:
"file:///C:/Users/Public/Music/Sample Music/hola.mp3"
"file:///C:/Users/Public/Music/Sample Music/hola.mp3"
Me arroja estos errores
run:
java.lang. NoClassDefFoundError: playmp3/playmp3
Caused by: java.lang.ClassNotFoundException: playmp3.playmp3
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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: playmp3.playmp3. Program will exit.
Exception in thread "main" Java Result: 1
q puede ser?????
run:
java.lang. NoClassDefFoundError: playmp3/playmp3
Caused by: java.lang.ClassNotFoundException: playmp3.playmp3
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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: playmp3.playmp3. Program will exit.
Exception in thread "main" Java Result: 1
q puede ser?????
Pues por lo que parece, no encuentra la clase "playmp3" dentro del paquete "playmp3". Por lo que veo, tu clase se llama "mp3", y no parece que esté en ningún paquete, al menos en el código que me pasas no aparece el paquete por ningún lado, por lo que para invocar a tu clase deberías hacerlo así:
java mp3
Aunque te recomiendo dos cosas:
1) Mete tu clase dentro de un paquete, por ejemplo "mp3", metiendo en la primera línea:
package mp3;
2) Renombra tu clase para que empiece por mayúscula (es la nomenclatura estándar de java), por ejemplo "Mp3player". Tendrías que renombrar tanto el fichero java como el código de dentro, para que ponga:
public class Mp3player
Importante: No olvides poner el atributo public para que la clase sea invocable. De esta forma, la invocación a tu clase quedaría:
java mp3. Mp3player
java mp3
Aunque te recomiendo dos cosas:
1) Mete tu clase dentro de un paquete, por ejemplo "mp3", metiendo en la primera línea:
package mp3;
2) Renombra tu clase para que empiece por mayúscula (es la nomenclatura estándar de java), por ejemplo "Mp3player". Tendrías que renombrar tanto el fichero java como el código de dentro, para que ponga:
public class Mp3player
Importante: No olvides poner el atributo public para que la clase sea invocable. De esta forma, la invocación a tu clase quedaría:
java mp3. Mp3player
Lo que yo tengo en el código es
un solo paquete llamado, reproducir_mp3, y dentro de el tengo dos clases una llamada "mp3" q es donde esta todo el codigo para reproducir el sonido y la otra q se llama "playmp3" q es el Main, con la q corro el programa....a lo mejor ya te distes cuenta de eso
y entonces este codigo
package reproducir_mp3;
import javax.media.*;
import java.net.URL;
class mp3 extends Thread
{
private URL url;
private MediaLocator mediaLocator;
private Player playMP3;
public mp3(String mp3)
{
try{
this.url = new URL(mp3);
}catch(java.net.MalformedURLException e)
{System.out.println(e.getMessage());}
}
@Override
public void run()
{
try{
mediaLocator = new MediaLocator(url);
playMP3 = Manager.createPlayer(mediaLocator);
}catch(java.io.IOException e)
{System.out.println(e.getMessage());
}catch(javax.media.NoPlayerException e)
{System.out.println(e.getMessage());}
playMP3.addControllerListener(new ControllerListener()
{
public void controllerUpdate(ControllerEvent e)
{
if (e instanceof EndOfMediaEvent)
{
playMP3.stop();
playMP3.close();
}
}
}
);
playMP3.realize();
playMP3.start();
}
}
es el q tengo en la clase "mp3"
y este otro
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reproducir_mp3;
/**
*
* @author Carlos
*/
public class playmp3 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
mp3 t = new mp3("file:///C:/Users/Public/Music/Sample Music/Kalimba.mp3");
t.start();
}
}
es el que tengo en "playmp3" y es con el que corro el programa
Pero ahora intentando correr el programa me saca un error hay más loco que los otro
me dice esto
Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 24000.0 frame rate, FrameSize=32768 bits
Failed to realize: com.sun.media.PlaybackEngine@120c24c0
Error: Unable to realize com.sun.media.PlaybackEngine@120c24c0
¿Sabes alguna solución?
un solo paquete llamado, reproducir_mp3, y dentro de el tengo dos clases una llamada "mp3" q es donde esta todo el codigo para reproducir el sonido y la otra q se llama "playmp3" q es el Main, con la q corro el programa....a lo mejor ya te distes cuenta de eso
y entonces este codigo
package reproducir_mp3;
import javax.media.*;
import java.net.URL;
class mp3 extends Thread
{
private URL url;
private MediaLocator mediaLocator;
private Player playMP3;
public mp3(String mp3)
{
try{
this.url = new URL(mp3);
}catch(java.net.MalformedURLException e)
{System.out.println(e.getMessage());}
}
@Override
public void run()
{
try{
mediaLocator = new MediaLocator(url);
playMP3 = Manager.createPlayer(mediaLocator);
}catch(java.io.IOException e)
{System.out.println(e.getMessage());
}catch(javax.media.NoPlayerException e)
{System.out.println(e.getMessage());}
playMP3.addControllerListener(new ControllerListener()
{
public void controllerUpdate(ControllerEvent e)
{
if (e instanceof EndOfMediaEvent)
{
playMP3.stop();
playMP3.close();
}
}
}
);
playMP3.realize();
playMP3.start();
}
}
es el q tengo en la clase "mp3"
y este otro
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reproducir_mp3;
/**
*
* @author Carlos
*/
public class playmp3 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
mp3 t = new mp3("file:///C:/Users/Public/Music/Sample Music/Kalimba.mp3");
t.start();
}
}
es el que tengo en "playmp3" y es con el que corro el programa
Pero ahora intentando correr el programa me saca un error hay más loco que los otro
me dice esto
Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 24000.0 frame rate, FrameSize=32768 bits
Failed to realize: com.sun.media.PlaybackEngine@120c24c0
Error: Unable to realize com.sun.media.PlaybackEngine@120c24c0
¿Sabes alguna solución?
Echa un vistazo a este link, donde parece que alguien se ha topado con el mismo error que tu. Vas a tener que añadir a mano el decoder de mp3 en la aplicación de administración de JMF.
Termine igual que el chamo de la pregunte... con el mismo error
hice todo lo que dice, agarre me baje el plugin del mp3, lo metí en las carpetas que dicen, y en esa misma carpeta también metí el de JMF, por lo que en una misma carpeta tenia el .jar de JMF y el del MP3... también puse el .jar del MP3 en el programa, por lo que tengo los dos .jar en el programa
después me fui al JMFregistry... metí el código en donde tenia que ser le di ADD presione como 1000 veces el Commit e intente correr otra vez la aplicación e igual me saca el mismo error... ya de verdad noc que más hacerle
hice todo lo que dice, agarre me baje el plugin del mp3, lo metí en las carpetas que dicen, y en esa misma carpeta también metí el de JMF, por lo que en una misma carpeta tenia el .jar de JMF y el del MP3... también puse el .jar del MP3 en el programa, por lo que tengo los dos .jar en el programa
después me fui al JMFregistry... metí el código en donde tenia que ser le di ADD presione como 1000 veces el Commit e intente correr otra vez la aplicación e igual me saca el mismo error... ya de verdad noc que más hacerle
Creo que uno de lo problemas es que después que yo le doy ADD y COMMIT y cierro la ventana y vuelvo a abrir el JMF Registry, ¿los cambios que hice anteriormente noc me quedan guardados... y tampoco entiendo el porque?, aun así también he corrido el programa sin cerrar el JMF Registry e igualmente sigue dando el mismo error
- Compartir respuesta
- Anónimo
ahora mismo