Ce que je suis en train de faireJSR-75 code spécifique sur les appareils non JSR-75?
Je coder une midlet J2ME, et je veux utiliser JSR-75 pour écrire des fichiers. Je souhaite également pouvoir exécuter mon application sur un appareil ne prenant 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") cela expose toutes les fonctionnalités.
- Créez une classe package-private ("ServiceImplementation") en étendant cette classe abstraite, en implémentant toutes les fonctionnalités.
- Placez les deux dans un paquet séparé, en rendant Service la façade du 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 va mal
Cela fonctionne parfaitement lorsque JSR-75 est présent. Le problème est que je veux aussi que cette midlet fonctionne sur des périphériques non JSR-75, et que ce code lève une exception ClassNotFoundException: javax/microedition/io/file/FileConnection quand j'essaye de le faire, même si j'attrape toutes les exceptions .
J'ai effectué une recherche à l'échelle du projet pour m'assurer que je n'utilise pas FileConnection ailleurs que dans Service et ServiceImplementation.
Est-ce que quelqu'un sait comment je suis censé faire cela?
Faire Class.forName() est suffisant pour lancer ClassNotFoundException car il tente de charger la classe pour créer un objet Class. –
Bien sûr, mais comme j'attrape toutes les exceptions, l'application ne devrait pas s'arrêter avec cette exception. – user299056