Lanzador personalizado para el desarrollo de la extensión SuperMap iDesktopX 11i

Autor: Xian

1. Antecedentes

  SuperMap iDesktopXEs SuperMap iObjects Javauna plataforma de desarrollo y aplicación GIS de escritorio multiplataforma, plug-in y de nivel empresarial construida a través de la biblioteca principal y el kit de desarrollo Java SE (JDK), que se puede ampliar y desarrollar en sistemas Windows o Linux basados ​​en el lenguaje Java.

  SuperMap iDesktopXEl programa de aplicación se construye en base al mecanismo de complemento, y cada función se realiza cargando el complemento correspondiente a la función, y la configuración de la interfaz es el complemento + archivo de configuración. En la actualidad, incluye principalmente 2 métodos de desarrollo de extensiones: 1. Extensión del iniciador personalizado, 2. Extensión del complemento de funciones.

  Cuando se inicia el programa, el fondo necesita una cierta cantidad de tiempo para funcionar.Durante este período, para una mejor experiencia del usuario, la interfaz de inicio del programa puede ser amigable para mejorar la experiencia del usuario. Este artículo presenta principalmente cómo SuperMap iDesktopXextender el desarrollo basado en un lanzador personalizado.

2. Preparación del entorno

  Según SuperMap iDesktopXel desarrollo ampliado, iDesktopX proporciona las dependencias de entorno requeridas, por lo que el entorno de desarrollo solo necesita iDesktopX e IDEA para cumplir con los requisitos.

software Versión enlace de descarga ilustrar
SuperMap DesktopX 11i y superior Dirección de descarga de SuperMap iDesktopX SuperMap iDesktopX proporciona dos tipos de paquete de instalación y un paquete verde simplificado, y puede descargar el paquete de la versión adecuada de acuerdo con los requisitos reales del proyecto
entiendo la idea 2020.3.x y superior Dirección de descarga de IntelliJ IDEA IntelliJ IDEA es un entorno de desarrollo integrado para el lenguaje de programación Java y está reconocido como la mejor herramienta de desarrollo de Java en la industria.

3. Crea un nuevo proyecto

  SuperMap iDesktopXHay dos formas de crear el programa de inicio:

3.1 Creado por la plantilla de extensión SuperMap iDesktopX

  • SuperMap iDesktopX 11i La función Nuevo proyecto de desarrollo secundario se proporciona en la barra de menú Ver , que puede crear rápidamente un proyecto de desarrollo secundario directamente basado en la plantilla de desarrollo extendida de iDesktopX.
    Nuevo proyecto de desarrollo de la extensión iDesktopX.png

  • La estructura del proyecto basada en la plantilla de desarrollo extendida iDesktopX es la siguiente:
    Nueva estructura de proyecto de desarrollo de extensiones de iDesktopX 11i.png

  El proyecto recién creado basado en la plantilla de desarrollo de la extensión iDesktopX ya configuró las dependencias del entorno requeridas para el desarrollo de la extensión iDesktopX en la plantilla, por lo que no es necesario configurar adicionalmente las dependencias del entorno para el proyecto y se puede usar directamente.

3.2 IDEA crea un nuevo proyecto de desarrollo de extensión iDesktopX

  • IDEA crea un nuevo proyecto vacío de Java

    • Nuevo proyecto
      IDEA nuevo proyecto.png

    • Configurar la versión de Java
      IDEA nuevo proyecto Java.png

    • Crear un proyecto vacío sin seleccionar una plantilla
      IDEA Nuevo Proyecto Java Vacío.png

    • estructura de proyecto vacía
      IDEA Nueva estructura de proyecto vacía de Java.png

    • Crear un nuevo paquete personalizado
      Crea un nuevo paquete.png en el directorio src

    • Nueva clase de entrada
      Crea una nueva clase de entrada en el paquete.png

    • Nueva función de entrada
      Agregue la función de entrada main.png a la clase de entrada

  • Configurar las dependencias del entorno de desarrollo de la extensión iDesktopX

    • Configurar la biblioteca de dependencias de desarrollo de la extensión iDesktopX

        SuperMap iDesktopXEl desarrollo extendido requiere un total de 4 configuraciones de bibliotecas dependientes, que son:

      • %SuperMap iDesktopX%\bin
      • %SuperMap iDesktopX%\lib
      • %SuperMap iDesktopX%\bundles\desktop_bundles
      • %SuperMap iDesktopX%\bundles\require_bundles

      Configurar las dependencias del entorno de desarrollo de la extensión iDesktopX.png

    • Embalaje del configurador

        Dado que es un desarrollo de extensión del programa de inicio de iDesktopX, el paquete jar se puede enviar directamente al directorio raíz de %SuperMap iDesktopX% al empaquetar, en lugar de enviarlo al directorio de complementos de iDesktopX (%SuperMap iDesktopX%\bundles\plugin_bundles )
      Configuración de empaquetado del iniciador personalizado.png

4. Personaliza la interfaz de inicio

  SuperMap iDesktopXLa interfaz correspondiente se proporciona para facilitar al usuario la personalización de la interfaz de inicio del programa para satisfacer las necesidades reales del proyecto, como el siguiente código, donde la clase CStartupDialog es una interfaz de inicio personalizada

// 设置自定义启动界面
SplashScreenUtilities splashScreenUtilitiesInstance = SplashScreenUtilities.getSplashScreenUtilitiesInstance();
splashScreenUtilitiesInstance.setStartupDialog(new CStartupDialog());
package com.supermap.startup;

import com.supermap.desktop.core.StartupDialogParameters;
import com.supermap.desktop.core.startup.IStartupDialog;
import com.supermap.desktop.core.utilties.FontUtilities;
import com.supermap.desktop.core.utilties.PathUtilities;
import com.supermap.desktop.core.utilties.ThreadUtilties;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * 自定义 iDesktopX 11i 启动面板
 */
public class CStartupDialog extends JDialog implements IStartupDialog {
    
    

    private final JTextArea textArea;
    private boolean isDisposed = false;

    public CStartupDialog() {
    
    
        // 设置启动界面关闭功能
        addWindowListener(new WindowAdapter() {
    
    
            @Override
            public void windowClosed(WindowEvent e) {
    
    
                super.windowClosed(e);
                if (!isDisposed) {
    
    
                    System.exit(0);
                }
            }
        });
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        setTitle("自定义启动界面");
        setBounds(0, 0, 600, 500);

        // 启动界面布局
        setLayout(new GridLayout(1, 2, 0, 0));
        JPanel leftPanel = new JPanel();
        add(leftPanel);
        JPanel rightPanel = new JPanel() {
    
    
            @Override
            protected void paintComponent(Graphics g) {
    
    
                super.paintComponent(g);

                // 绘制启动界面动画背景
                String iconPath = PathUtilities.getFullPathName("../resources/Frame/StartupIcon/Startup_Right100.gif");
                ImageIcon imageIcon = new ImageIcon(iconPath);
                Image image = imageIcon.getImage();
                g.drawImage(image, 0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight(), this);
            }
        };
        add(rightPanel);

        // 设置启动界面图标
        String iconPath = PathUtilities.getFullPathName("../resources/Frame/StartupIcon/Logo_32.png");
        ImageIcon imageIcon = new ImageIcon(iconPath);
        Image iconImage = imageIcon.getImage();
        setIconImage(iconImage);

        // 显示启动界面位置
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        this.setLocation(screenSize.width / 2 - this.getWidth() / 2, screenSize.height / 2 - this.getHeight() / 2);

        // 设置启动界面日志输出文本框
        Font defaultFont = FontUtilities.getDefaultFont();
        textArea = new JTextArea();
        textArea.setForeground(Color.BLACK);
        textArea.setOpaque(false);
        textArea.setEditable(false);
        textArea.setFont(defaultFont);
        textArea.setLineWrap(false);
        textArea.setWrapStyleWord(false);

        if (StartupDialogParameters.isPluginInfoVisible()) {
    
    
            JScrollPane scrollPane = new JScrollPane(textArea);
            scrollPane.setPreferredSize(new Dimension(280, 450));
            leftPanel.add(scrollPane);
        }
    }

    @Override
    public void update(String text) {
    
    
        textArea.append(text + "\n");
        textArea.setCaretPosition(textArea.getText().length());
    }

    @Override
    public void showDialog() {
    
    
        setVisible(true);
        ThreadUtilties.executeAfterDesktopVisible(this::doDispose, 1);
    }

    @Override
    public void dispose() {
    
    
        super.dispose();
    }

    public void doDispose() {
    
    
        isDisposed = true;
        dispose();
    }
}

  El efecto de la interfaz de inicio personalizada implementada por el código anterior es el siguiente: la implementación de la interfaz de inicio personalizada es solo un ejemplo, y el usuario puede personalizarla de acuerdo con la situación real del proyecto.
Interfaz de inicio personalizada de iDesktopX.png

5. Personaliza las acciones posteriores al lanzamiento

  Cuando SuperMap iDesktopXse carga la interfaz, se activará el evento vinculado a ThreadUtilties.executeAfterDesktopVisible , y el usuario puede implementar directamente la ejecución lógica especificada en este evento, como se muestra a continuación, cuando iDesktopX se inicia, carga el espacio de trabajo especificado y abre la escena.

ThreadUtilties.executeAfterDesktopVisible(() -> {
    
    
    // 打开默认工作空间
    Application activeApplication = Application.getActiveApplication();
    Workspace workspace = activeApplication.getWorkspace();
    WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
    workspaceConnectionInfo.setServer("sampleData/3D/CBDDataset/CBD.smwu");
    workspaceConnectionInfo.setType(WorkspaceType.SMWU);
    workspace.open(workspaceConnectionInfo);

    // 默认打开当前工作空间中的第一个场景
    Scenes scenes = workspace.getScenes();
    String sceneName = scenes.get(0);
    SwingUtilities.invokeLater(() -> {
    
    
        IFormScene sceneForm = (IFormScene) FormUtilities.fireNewWindowEvent(WindowType.SCENE, sceneName);
        sceneForm.openScene(sceneName);
    });
});

Abre automáticamente la escena del espacio de trabajo especificado después de que se inicie iDesktopX.gif

6. Modificar el método de inicio

  SuperMap iDesktopXProporciona 2 métodos de inicio: 1. inicio de script bat (Windows) / sh (Linux), 2. inicio del programa ejecutable exe (Windows). Tomando el sistema operativo Windows como ejemplo, a continuación se describe la aplicación del programa de inicio personalizado en los dos métodos de inicio.

  • Modificar el script de inicio de iDesktopX

    La secuencia de comandos de inicio startup.bat   se proporciona en el directorio raíz de iDesktopX . La configuración predeterminada en la secuencia de comandos es usar iDesktop.jar en el mismo directorio que la entrada de inicio. Por lo tanto, después de empaquetar el programa de inicio personalizado CStartup.jar , puede modificar directamente el contenido de la secuencia de comandos de inicio startup.bat.

      Solo necesita modificar el paquete jar de inicio de CLASSPATH y el comando java para iniciar la configuración de la clase de entrada, como se muestra en la siguiente figura:

    Modificar el script de inicio de iDesktopX.png

  • Empaquete un lanzador personalizado en un ejecutable exe

      Hay muchas formas de empaquetar el paquete jar en un archivo ejecutable exe, y el usuario puede elegir la forma adecuada según la situación real del proyecto. Una herramienta de empaquetado ligero Launch4j se selecciona aquí para la introducción.

      La dirección de descarga proporcionada de Launch4j contiene el paquete de compresión del programa launch4j.zip y la plantilla de configuración de launch4j.xml.

    Paquete de descarga Launch4j estructura.png

    • Coloque el archivo launch4j.xml en el directorio raíz de %SuperMap iDesktopX%

    • Haga doble clic para ejecutar el programa ejecutable launch4j.exe

    • Importe el archivo launch4j.xml en el directorio raíz de %SuperMap iDesktopX%

    • Modificar archivo de salida , ruta de tiempo de ejecución de Jar , configuración de parámetros de icono

      Modificar la configuración del parámetro Launch4j.png

    • Después de que Launch4j genera el archivo ejecutable exe, se puede ejecutar haciendo doble clic en el directorio raíz de iDesktopX

      exe archivo ejecutable generado por Launch4j.png

7. Resumen

  Este artículo presenta en detalle cómo SuperMap iDesktopXdesarrollar un lanzador personalizado basado en la extensión, el proceso completo desde el desarrollo de una nueva extensión hasta el empaquetado y uso final, que se puede usar como referencia para que los usuarios comiencen con el lanzador personalizado de desarrollo de la extensión iDesktopX.

  Además, este tutorial también proporciona un programa de inicio personalizado CStartup desarrollado en base al tutorial anterior para el desarrollo de la extensión SuperMap iDesktopX 11i También puede descargar directamente el código de muestra para compilarlo y empaquetarlo con IDEA y Launch4j , y luego depurarlo y ejecutarlo.

Supongo que te gusta

Origin blog.csdn.net/supermapsupport/article/details/131593343
Recomendado
Clasificación