Frage

Was ich versuche zu tun

Ich kodiere einen J2ME Midlet und möchte JSR-75 zum Schreiben von Dateien verwenden. Ich möchte auch in der Lage sein, meine App auf dem Gerät auszuführen, die JSR-75 nicht unterstützt.

Wie ich es mache

Ich habe eine Website gefunden, die erklärt, wie das geht (ich habe die URL vergessen, sorry):

  • Erstellen Sie eine öffentliche abstrakte Klasse ("Service"), die alle Funktionen enthüllt.
  • Erstellen Sie eine Paket-private Klasse ("ServiceImplementation"), die diese abstrakte Klasse erweitert und alle Funktionen implementiert.
  • Legen Sie beides in ein separates Paket ein und rendern Sie die Fassade für das Paket.

Um diese Klasse zu instanziieren, wird die folgende Methode aus der abstrakten Klasse verwendet:

public static Service getInstance() {
    try {
        Class.forName("javax.microedition.io.file.FileConnection");
        Class c = Class.forName("my.package.Service");
        Service service = (Service) (c.newInstance());
        return service;
    } catch (Exception e) {
        return null;
    }
}

Was geht schief

Dies funktioniert perfekt, wenn JSR-75 vorhanden ist. Das Problem ist, dass ich möchte, dass dieses Midlet auch auf Nicht-JSR-75-Geräten ausgeführt wird, und dieser Code löst eine KlasseNotFoundException aus: Javax/Microedition/IO/Datei/FileConnection, wenn ich es versuche, obwohl ich alle Außerfangen fange .

Ich habe eine projektweite Suche durchgeführt, um sicherzustellen, dass ich FileConnection nirgendwo anders, sondern in Service und ServiceImplementation verwende.

Weiß jemand, wie ich das machen soll?

War es hilfreich?

Lösung

Etwas verwirrt über das, was Sie tun, besonders mit zwei Klassen in verschiedenen Paketen, die beide als Service genannt werden! Aber ich bin auf dieses Problem gestoßen, als ich Code zum Schreiben von Mobilteilen mit und ohne bestimmte JSRs geschrieben habe.

Beziehen Sie sich in Ihrer Serviceklasse auf die JSR-75-Klassen? Ich vermute, obwohl Sie die Serviceklasse nicht instanziieren, wird sie immer noch geladen. Das JVM stößt dann auf diese Klassen, die nicht vorhanden sind.

Bewegen Sie alle Verweise auf JSR-75-Klassen in eine Klasse, auf die aus der Dienstklasse verwiesen wird.

Andere Tipps

Anscheinend kann ich das verwenden:

System.getProperty("microedition.io.file.FileConnection.version");

Wenn das NULL zurückgibt, wird JSR-75 nicht unterstützt. Wenn es etwas anderes zurückgibt, dann ist es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top