Klingt irgendwie wie MP3 Codec Problem und ist auch die Fortsetzung dieser unendlichen Geschichte. Es werden nämlich leider immer noch einige wenige Titel nur auf einem PC abgespielt (der alle Titel abspielt). Der andere PC spielt jetzt fast alle Titel. Aber leider nur fast alle.
Der erste PC, der alle abspielt, verwendet immer den com.sun.media.content.audio.mpeg.Handler, der andere PC verwendet immer den com.sun.media.content.unknown.Handler.
Wie und wo kann ich beeinflussen, welchen Handler Java zum Abspielen von mp3 verwendet?
=============================================================
// Edit: Ich habe mal einen Test ins Programm eingebaut:
findet auf beiden PC beide Klassen:
Es liegt also nicht daran, dass die entsprechende Klasse nicht gefunden wird. Es kann also nur irgendwo um die Reihenfolge in der Auswahl gehen.
=============================================================
//Edit: Ich habe was gefunden:
JMF 2.0 API (03/10/01): Class Manager Abschnitt Finding DataSources by Protocol
JMF 2.0 API (03/10/01): Class PackageManager
Kann das das sein, wonach ich suche? Kann ich damit die Klasse com.sun.media.content.unknown.Handler aus der Liste streichen? Wenn ja, wie?
=============================================================
//Edit: Ich habe ein Beispielprogramm zum Testen gefunden:
Koders Code Search: PackageManagerTest.java - Java
Ich schau mal, ob das die richtige Schiene ist.
=============================================================
//Edit: Leider läuft das Programm nicht. Rufe ich es vielleicht falsch auf? Die main-Methode ist ganz unten.
[JAVA=3]import java.util.Vector;
import javax.media.PackageManager;
import junit.framework.TestCase;
/**
*
* @author Ken Larson
*
*/
public class PackageManagerTest extends TestCase
{
public void testPackageManager_Protocol()
{
synchronized (PackageManager.class)
{
assertTrue(PackageManager.getProtocolPrefixList().contains("javax"));
assertTrue(PackageManager.getProtocolPrefixList().contains("com.sun"));
assertTrue(PackageManager.getProtocolPrefixList().contains("com.ibm"));
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "com.sun", "com.ibm"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("com.sun");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"}); // // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("com.ibm");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.add("abc");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "abc"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "abc"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
final Vector v = new Vector();
v.add("javax");
v.add("com.sun");
v.add("com.ibm");
PackageManager.setProtocolPrefixList(v);
}
}
}
public void testPackageManager_Content()
{
synchronized (PackageManager.class)
{
assertTrue(PackageManager.getContentPrefixList().contains("javax"));
assertTrue(PackageManager.getContentPrefixList().contains("com.sun"));
assertTrue(PackageManager.getContentPrefixList().contains("com.ibm"));
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "com.sun", "com.ibm"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getContentPrefixList());
// assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("com.sun");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("com.ibm");
//dumpStringVector(PackageManager.getContentPrefixList());
// assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getContentPrefixList();
v.add("abc");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "abc"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "abc"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
final Vector v = new Vector();
v.add("javax");
v.add("com.sun");
v.add("com.ibm");
PackageManager.setContentPrefixList(v);
}
}
}
private void assertStringVectorEquals(Vector v1, String[] a)
{
assertEquals(v1 == null, a == null);
if (v1 == null)
return;
assertEquals(v1.size(), a.length);
for (int j = 0; j < v1.size(); ++j)
{
final String s1 = (String) v1.get(j);
final String s2 = (String) a[j];
assertEquals(s1, s2);
}
}
private void assertStringVectorEquals(Vector v1, Vector v2)
{
assertEquals(v1 == null, v2 == null);
if (v1 == null)
return;
assertEquals(v1.size(), v2.size());
for (int j = 0; j < v1.size(); ++j)
{
final String s1 = (String) v1.get(j);
final String s2 = (String) v2.get(j);
assertEquals(s1, s2);
}
}
private void dumpStringVector(Vector v1)
{
for (int i = 0; i < v1.size(); ++i)
{ String s = (String) v1.get(i);
System.out.println(s);
}
}
private void dump()
{
System.out.println("getContentPrefixList:");
final Vector v = PackageManager.getContentPrefixList();
for (int i = 0; i < v.size(); ++i)
{ System.out.println( v.get(i));
}
}
public static void main(String[] args)
{
PackageManagerTest cht=new PackageManagerTest();
cht.testPackageManager_Protocol();
}
}[/code]
Hier das Ergebnis:
Der erste PC, der alle abspielt, verwendet immer den com.sun.media.content.audio.mpeg.Handler, der andere PC verwendet immer den com.sun.media.content.unknown.Handler.
Wie und wo kann ich beeinflussen, welchen Handler Java zum Abspielen von mp3 verwendet?
=============================================================
// Edit: Ich habe mal einen Test ins Programm eingebaut:
Java:
try {
Class.forName("com.sun.media.content.audio.mpeg.Handler");
} catch (ClassNotFoundException e) {except=e;
} catch (Exception e) {except=e;
} finally {
if (except!=null) {
System.out.println(except.toString());
except=null;
}else{
System.out.println("com.sun.media.content.audio.mpeg.Handler found");
}
}
try {
Class.forName("com.sun.media.content.unknown.Handler");
} catch (ClassNotFoundException e) {except=e;
} catch (Exception e) {except=e;
} finally {
if (except!=null) {
System.out.println(except.toString());
except=null;
}else{
System.out.println("com.sun.media.content.unknown.Handler found");
}
}
findet auf beiden PC beide Klassen:
Code:
com.sun.media.content.audio.mpeg.Handler found
com.sun.media.content.unknown.Handler found
Es liegt also nicht daran, dass die entsprechende Klasse nicht gefunden wird. Es kann also nur irgendwo um die Reihenfolge in der Auswahl gehen.
=============================================================
//Edit: Ich habe was gefunden:
JMF 2.0 API (03/10/01): Class Manager Abschnitt Finding DataSources by Protocol
JMF 2.0 API (03/10/01): Class PackageManager
Kann das das sein, wonach ich suche? Kann ich damit die Klasse com.sun.media.content.unknown.Handler aus der Liste streichen? Wenn ja, wie?
=============================================================
//Edit: Ich habe ein Beispielprogramm zum Testen gefunden:
Koders Code Search: PackageManagerTest.java - Java
Ich schau mal, ob das die richtige Schiene ist.
=============================================================
//Edit: Leider läuft das Programm nicht. Rufe ich es vielleicht falsch auf? Die main-Methode ist ganz unten.
[JAVA=3]import java.util.Vector;
import javax.media.PackageManager;
import junit.framework.TestCase;
/**
*
* @author Ken Larson
*
*/
public class PackageManagerTest extends TestCase
{
public void testPackageManager_Protocol()
{
synchronized (PackageManager.class)
{
assertTrue(PackageManager.getProtocolPrefixList().contains("javax"));
assertTrue(PackageManager.getProtocolPrefixList().contains("com.sun"));
assertTrue(PackageManager.getProtocolPrefixList().contains("com.ibm"));
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "com.sun", "com.ibm"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("com.sun");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"}); // // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"com.ibm", "javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("com.ibm");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getProtocolPrefixList();
v.add("abc");
//dumpStringVector(PackageManager.getProtocolPrefixList());
//assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "abc"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setProtocolPrefixList(v);
assertStringVectorEquals(PackageManager.getProtocolPrefixList(), new String[] {"javax", "abc"});
//dumpStringVector(PackageManager.getProtocolPrefixList());
}
{
final Vector v = new Vector();
v.add("javax");
v.add("com.sun");
v.add("com.ibm");
PackageManager.setProtocolPrefixList(v);
}
}
}
public void testPackageManager_Content()
{
synchronized (PackageManager.class)
{
assertTrue(PackageManager.getContentPrefixList().contains("javax"));
assertTrue(PackageManager.getContentPrefixList().contains("com.sun"));
assertTrue(PackageManager.getContentPrefixList().contains("com.ibm"));
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "com.sun", "com.ibm"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getContentPrefixList());
// assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.sun", "com.ibm", "javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("com.sun");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"com.ibm", "javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("com.ibm");
//dumpStringVector(PackageManager.getContentPrefixList());
// assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getContentPrefixList();
v.remove("javax");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax"});
final Vector v = PackageManager.getContentPrefixList();
v.add("abc");
//dumpStringVector(PackageManager.getContentPrefixList());
//assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "abc"}); // this fails with the FMJ JmfRegistry because it copies the data. This is an acceptable difference between JMF and FMJ.
PackageManager.setContentPrefixList(v);
assertStringVectorEquals(PackageManager.getContentPrefixList(), new String[] {"javax", "abc"});
//dumpStringVector(PackageManager.getContentPrefixList());
}
{
final Vector v = new Vector();
v.add("javax");
v.add("com.sun");
v.add("com.ibm");
PackageManager.setContentPrefixList(v);
}
}
}
private void assertStringVectorEquals(Vector v1, String[] a)
{
assertEquals(v1 == null, a == null);
if (v1 == null)
return;
assertEquals(v1.size(), a.length);
for (int j = 0; j < v1.size(); ++j)
{
final String s1 = (String) v1.get(j);
final String s2 = (String) a[j];
assertEquals(s1, s2);
}
}
private void assertStringVectorEquals(Vector v1, Vector v2)
{
assertEquals(v1 == null, v2 == null);
if (v1 == null)
return;
assertEquals(v1.size(), v2.size());
for (int j = 0; j < v1.size(); ++j)
{
final String s1 = (String) v1.get(j);
final String s2 = (String) v2.get(j);
assertEquals(s1, s2);
}
}
private void dumpStringVector(Vector v1)
{
for (int i = 0; i < v1.size(); ++i)
{ String s = (String) v1.get(i);
System.out.println(s);
}
}
private void dump()
{
System.out.println("getContentPrefixList:");
final Vector v = PackageManager.getContentPrefixList();
for (int i = 0; i < v.size(); ++i)
{ System.out.println( v.get(i));
}
}
public static void main(String[] args)
{
PackageManagerTest cht=new PackageManagerTest();
cht.testPackageManager_Protocol();
}
}[/code]
Hier das Ergebnis:
Code:
Exception in thread "main" junit.framework.ComparisonFailure: null expected:<[com.sun]> but was:<[javax]>
at junit.framework.Assert.assertEquals(Assert.java:81)
at junit.framework.Assert.assertEquals(Assert.java:87)
at de.virginiacity.software.PackageManagerTest.assertStringVectorEquals(PackageManagerTest.java:199)
at de.virginiacity.software.PackageManagerTest.testPackageManager_Protocol(PackageManagerTest.java:27)
at de.virginiacity.software.PackageManagerTest.main(PackageManagerTest.java:236)
Zuletzt bearbeitet: