es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ejecutar (Vector) Storage.getInstance().readObject(filePath); en Java 8 Swing Package.

Windows 10 Pro
Último simulador
Proyecto Java Swing

Me gustaría ejecutar “Vector a1 = (Vector) Storage.getInstance().readObject(filePath);” en una aplicación Java Swing en ejecución en una plataforma Windows 10. Intenté importar CodenameOne.jar en el paquete Swing, sin embargo, al ejecutar el código anterior, obtengo una excepción de puntero nulo en Storage.getInstance().

¿Hay alguna forma de ejecutar esto en Swing?

¿Qué opinas?

Saludos cordiales.

Gracias, no inicialicé la pantalla, sin embargo, “Display.init(Object m)” requiere un argumento de objeto y el método Init está obsoleto.

¿Podría proporcionarme las dependencias de Display de codenameone?
¿Y quizás un fragmento de código de Java Swing para inicializar Display para ejecutar Storage.getInstance().readObject(filePath)?

¿Qué opinas?

Saludos cordiales.

Gracias, al pasar init (directorio de trabajo) se resolvió la excepción lanzada.
Aquí está el fragmento de código utilizado para permitirme ejecutar: Storage.getInstance().readObject(filePath).

   String filePath = incSrv.Pwd (); // obtiene el directorio de trabajo
    try {
        javax.swing.SwingUtilities.invokeLater (nueva Runnable () {
            public void run () {
                Display.init (filePath);
                String fileName = “A1-MMA.properties”;
                Vector a1 = (Vector) Storage.getInstance (). readObject (filePath);
            }
        });
    } catch (Exception e) {
    }
}

Y parece que funciona,
Sin embargo, me queda un formulario oscurecido que parece ser modal.
¿Cómo puedo evitar esto o eliminarlo?

FYI: Lo que estoy creando aquí es una solución alternativa para serializar Vectores en Codenameone. Guardo el Vector en un archivo usando “Storage.getInstance (). WriteObject (Path, Vector)”
Convierto el archivo en bytes y lo escribo en el servidor Swing VIA socket.
Usando Storage.getInstance().readObject(file) en el servidor Swing, he deserializado el objeto en el Vector de mi aplicación.
Esto parece funcionar bien y es más eficiente que el método actual que uso para enviar datos Vector complejos desde la aplicación al servidor Swing.

¿Podría decirme si ve alguna bandera roja con esta solución alternativa?
¿Es posible que la capacidad de Storage.getInstance().readObject (file) en el servidor Swing desaparezca?
Este método ahorrará mucho tiempo para mover datos Vector hacia y desde la aplicación / servidor.

¿Qué opinas, saludos cordiales?

Storage.getInstance().readObject(file) // (A1ServiceSrv.java:571)
Generó esta excepción:
java.lang.NullPointerException
en com.codename1.io.Storage.init(Storage.java:89)
en com.codename1.io.Storage.getInstance(Storage.java:112)
en Main.A1ServiceSrv.loadVectorFromFile(A1ServiceSrv.java:571)

Saludos,

12/11/2021:
Gracias Shai,

Estoy incluyendo en mi classpath CodenameOne.jar con fecha de actualización del 12/11/2021 después de la actualización de CN1.
Obteniendo la misma excepción de puntero nulo.
Pasando la ruta “C: \ Src1 \ A1-Arms \ A1-Server \ A1-MMA.properties” (ruta absoluta)
También intenté “A1-MMA.properties”, sin embargo, no creo que Codenameone sepa dónde está mi ruta de inicio ya que no la estamos inicializando como lo hicimos con Display.init (“Directorio de trabajo actual donde residen los archivos”);

Este es el Fresh Stack Trace sin llamar a Display.init (12-20-2021)

java.lang.NullPointerException en

com.codename1.ui.Display.getResourceAsStream(Display.java:3086)
en com.codename1.io.Log.print(Log.java:327)
en com.codename1.io.Log.logThrowable(Log.java:299)
en com.codename1.io.Log.e(Log.java:285)
en com.codename1.io.Storage.readObject(Storage.java:271)
en Main.A1ServiceSrv.loadVectorFromFile(A1ServiceSrv.java:596)

vector = (Vector) Storage.getInstance().readObject(filePath); // (A1ServiceSrv.java:596)

Saludos.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en codenameone, me gustaría abordar la siguiente pregunta:

    ¿Hay alguna manera de ejecutar Vector a1 = (Vector) Storage.getInstance().readObject(filePath) en una aplicación de Java Swing en una plataforma de Windows 10?

    Para ejecutar Vector a1 = (Vector) Storage.getInstance().readObject(filePath) en una aplicación de Java Swing en una plataforma de Windows 10, puede importar el archivo CodenameOne.jar en su paquete de Swing. Sin embargo, es posible que encuentre una excepción de puntero nulo en Storage.getInstance().

    Para evitar la excepción de puntero nulo, debe inicializar correctamente el Display. Puede hacer esto utilizando el método Display.init(Object m). Sin embargo, tenga en cuenta que este método está obsoleto.

    Para inicializar el Display y ejecutar Vector a1 = (Vector) Storage.getInstance().readObject(filePath), puede usar el siguiente fragmento de código de Java Swing:

    String filePath = incSrv.Pwd(); // obtiene el directorio de trabajo
    try {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Display.init(filePath);
                String fileName = "A1-MMA.properties";
                Vector a1 = (Vector) Storage.getInstance().readObject(filePath);
            }
        });
    } catch (Exception e) {
    }
    

    Este fragmento de código debería ayudarlo a ejecutar Vector a1 = (Vector) Storage.getInstance().readObject(filePath) correctamente.

    En cuanto a su preocupación sobre el método alternativo que ha creado para serializar Vector en Codenameone, parece ser un enfoque razonable. Sin embargo, debe tener en cuenta que la capacidad de utilizar Storage.getInstance().readObject(file) en el Servidor Swing puede desaparecer en el futuro.

    En general, parece que su solución alternativa es más eficiente que el método actual que utiliza para entregar Vectores complejos desde la aplicación al Servidor Swing. Solo tenga en cuenta las posibles limitaciones de esta solución alternativa en el futuro.

Comments are closed.