Question

Ce que je suis en train de faire

Je suis un codage midlet J2ME, et je veux utiliser JSR-75 pour écrire des fichiers. Je veux aussi être en mesure d'exécuter mon application sur l'appareil qui ne prend pas en charge JSR-75.

Comment je fais

J'ai trouvé un site qui explique comment faire (oublié l'URL, désolé):

  • Créer une classe abstraite publique ( "Service") qui expose toutes les fonctionnalités.
  • Créer une classe de package-privé ( "ServiceImplementation") l'extension de cette classe abstraite, la mise en œuvre de toutes les fonctionnalités.
  • Mettre à la fois dans un emballage séparé, ce qui rend service la façade pour le paquet.

Pour instancier cette classe, la méthode suivante de la classe abstraite est utilisée:

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

Ce qui se passe mal

Cela fonctionne parfaitement lorsque JSR-75 est présent. Le problème est que je veux que ce midlet à courir sur les non dispositifs JSR-75 ainsi, et ce code jette un ClassNotFoundException: javax / MicroEdition / io / file / FileConnection lorsque je tente ne le fais, même si je suis attraper toutes les exceptions .

Je l'ai fait une recherche de projets à l'échelle pour faire en sorte que je n'utilise FileConnection nulle part ailleurs, mais dans le service et ServiceImplementation.

Quelqu'un sait comment je suis censé faire?

Était-ce utile?

La solution

Un peu confus au sujet de ce que vous faites, surtout avec deux classes dans différents forfaits à la fois de service appelé! Mais je l'ai rencontré ce problème lors de l'écriture de code pour fonctionner sur les téléphones avec et sans certains JSR.

parlez-vous des cours JSR-75 dans votre classe de service? Je pense que même si vous n'êtes pas instancier la classe de service, il est toujours en cours de chargement. La machine virtuelle Java arrive alors dans ces classes qui ne sont pas présents.

Déplacer toutes les références à JSR-75 classes dans une classe qui est référencé à partir de la classe de service.

Autres conseils

Apparemment, je peux utiliser ceci:

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

Si cela renvoie NULL, JSR-75 ne sont pas pris en charge. Si elle retourne toute autre chose, il est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top