Pregunta

Lo que estoy tratando de hacer

Estoy codificación de un MIDlet J2ME, y quiero usar JSR-75 para escribir archivos. También quiero ser capaz de ejecutar mi aplicación en el dispositivo que no tiene soporte para JSR-75.

¿Cómo lo estoy haciendo

He encontrado un sitio web que explica cómo hacer esto (se olvidó la URL, lo siento):

  • Crea una clase abstracta pública ( "Servicio") que expone toda la funcionalidad.
  • Crear una clase de paquete-privada ( "ServiceImplementation") que se extiende esta clase abstracta, la implementación de todas las funciones.
  • poner los dos en un paquete separado, la prestación de servicios de la fachada para el paquete.

Para crear una instancia de esta clase, se utiliza el siguiente método de la clase abstracta:

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

¿Qué va mal

Esto funciona perfectamente cuando está presente JSR-75. El problema es que quiero que este MIDlet se ejecute en dispositivos que no sean de JSR-75 también, y este código lanza una ClassNotFoundException: javax / / / archivo MicroEdition io / FileConnection cuando intento no hacerlo, a pesar de que estoy poniendo todas las excepciones .

He hecho un proyecto de amplia búsqueda para asegurarse de que no estoy usando FileConnection cualquier otro sitio, en el servicio y ServiceImplementation.

¿Alguien sabe cómo se supone que debo hacer esto?

¿Fue útil?

Solución

confunde ligeramente sobre lo que está haciendo, especialmente con dos clases en diferentes paquetes ambos llamados servicio! Pero he encontrado con este problema al escribir código para funcionar en teléfonos con y sin ciertos JSRs.

¿Usted está refiriendo a JSR-75 clases en su clase de servicio? Sospecho que a pesar de que usted no está crear instancias de la clase de servicio, todavía está siendo cargado. La JVM es entonces viene a través de estas clases que no están presentes.

Mover todas las referencias a JSR-75 clases en una clase que se hace referencia a la clase de servicio.

Otros consejos

Al parecer, puedo usar esto:

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

Si eso vuelve nulo, no se admite JSR-75. Si devuelve cualquier otra cosa, lo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top