Domanda

Quello che sto cercando di fare

Sono codifica una midlet J2ME, e voglio utilizzare JSR-75 per scrivere i file. Voglio anche essere in grado di eseguire il mio app sul dispositivo che non hanno il supporto per JSR-75.

Come lo sto facendo

Ho trovato un sito che spiega come fare questo (dimenticato l'URL, sorry):

  • Crea una classe astratta pubblica ( "Servizio") che espone tutte le funzionalità.
  • Creare una classe package-privato ( "ServiceImplementation") che si estende questa classe astratta, implementando tutte le funzionalità.
  • mettere sia in un pacchetto separato, rendendo servizio alla facciata per il pacchetto.

Per istanziare questa classe, viene utilizzato il seguente metodo dalla classe astratta:

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

ciò che va male

Questo funziona perfettamente quando JSR-75 è presente. Il problema è che voglio che questo midlet per funzionare su dispositivi non JSR-75, nonché, e questo codice genera un ClassNotFoundException: / / io / file di javax MicroEdition / FileConnection quando provo non faccio, anche se sto cattura tutte le eccezioni .

Ho fatto una ricerca a livello di progetto per garantire che non sto usando FileConnection altrove ma in servizio e ServiceImplementation.

Qualcuno sa come dovrei fare questo?

È stato utile?

Soluzione

Un po 'confuso su quello che stai facendo, soprattutto con due classi in diversi pacchetti, sia chiamato il servizio! Ma ho riscontrato questo problema quando si scrive codice per funzionare su telefoni con e senza alcuni JSR.

Si sta riferimento a JSR-75 classi nella classe di servizio? Ho il sospetto che anche se non si è istanziare la classe di servizio, è ancora in fase di caricamento. La JVM viene quindi venendo attraverso queste classi che non sono presenti.

Spostare tutti i riferimenti a JSR-75 classi in una classe che fa riferimento dalla classe di servizio.

Altri suggerimenti

A quanto pare posso usare questo:

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

Se questo restituisce null, JSR-75 non è supportato. Se restituisce qualsiasi altra cosa, lo è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top