SuperMap iDesktopX 11i 拡張機能開発用のカスタム ランチャー

作者: イン

1. 背景

  SuperMap iDesktopXこれはSuperMap iObjects Java、コア ライブラリと Java SE Development Kit (JDK) を通じて構築されたエンタープライズ レベルのプラグイン、クロスプラットフォームのデスクトップ GIS アプリケーションおよび開発プラットフォームであり、Java 言語に基づいて Windows または Linux システムで拡張および開発できます。

  SuperMap iDesktopXアプリケーションプログラムはプラグインの仕組みに基づいて構築されており、各機能はその機能に対応したプラグインをロードすることで実現され、インターフェース構成はプラグイン+設定ファイルとなる。現時点では、主に 1. カスタム ランチャー拡張機能、2. 機能プラグイン拡張機能の 2 つの拡張機能開発方法が含まれています。

  プログラムが起動すると、バックグラウンドが動作するまでに一定の時間がかかりますが、この間、ユーザー エクスペリエンスを向上させるために、プログラムの起動インターフェイスをフレンドリーにすることで、ユーザー エクスペリエンスを向上させることができます。SuperMap iDesktopXこの記事では主にカスタムランチャーをベースに開発を拡張する方法を紹介します。

2. 環境の準備

  拡張開発に基づいてSuperMap iDesktopX、必要な環境依存関係は iDesktopX によって提供されるため、開発環境で必要なのは iDesktopX と IDEA だけで要件を満たすことができます。

ソフトウェア バージョン ダウンロードリンク 説明する
スーパーマップデスクトップX 11i以降 SuperMap iDesktopX ダウンロード アドレス SuperMap iDesktopX には 2 種類のインストール パッケージと簡易グリーン パッケージが用意されており、実際のプロジェクトの要件に応じて適切なバージョンのパッケージをダウンロードできます。
その考えは理解できます 2020.3.x 以降 IntelliJ IDEAのダウンロードアドレス IntelliJ IDEA は Java プログラミング言語の統合開発環境であり、業界で最高の Java 開発ツールとして認められています。

3. 新しいプロジェクトを作成する

  SuperMap iDesktopXスタートアップ プログラムを作成するには 2 つの方法があります。

3.1. SuperMap iDesktopX 拡張テンプレートによって作成

  • SuperMap iDesktopX 11i 新しいセカンダリ開発プロジェクト機能が[表示]メニュー バーに提供されており、iDesktopX 拡張開発テンプレートに基づいて直接セカンダリ開発プロジェクトを迅速に作成できます。
    新しい iDesktopX 拡張機能開発プロジェクト.png

  • iDesktopX 拡張開発テンプレートに基づくプロジェクト構造は次のとおりです。
    iDesktopX 11i.png からの新しい拡張機能開発プロジェクト構造

  iDesktopX 拡張機能開発テンプレートに基づいて新しく作成されたプロジェクトは、iDesktopX 拡張機能開発に必要な環境依存関係をテンプレート内ですでに構成しているため、プロジェクトの環境依存関係を追加で構成する必要はなく、直接使用できます。

3.2. IDEA が新しい iDesktopX 拡張機能開発プロジェクトを作成

  • IDEA は新しい Java の空のプロジェクトを作成します

    • 新しいプロジェクト
      IDEA の新しいプロジェクト.png

    • Javaのバージョンを設定する
      IDEA 新しい Java プロジェクト.png

    • テンプレートを選択せず​​に空のプロジェクトを作成する
      IDEA New Java Empty Project.png

    • 空のプロジェクト構造
      IDEA 新しい Java の空のプロジェクトの構造.png

    • 新しいカスタム パッケージを作成する
      src ディレクトリに新しい package.png を作成します

    • 新規エントリークラス
      package.png に新しいエントリ クラスを作成します。

    • 新しいエントリー機能
      エントリー関数 main.png をエントリークラスに追加します。

  • iDesktopX 拡張機能開発環境の依存関係を構成する

    • iDesktopX 拡張機能開発の依存関係ライブラリを構成する

        SuperMap iDesktopX拡張開発には、次の合計 4 つの依存ライブラリ構成が必要です。

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

      iDesktopX 拡張機能開発環境の依存関係を構成する.png

    • コンフィギュレータのパッケージ化

        iDesktopX スタートアップ プログラムの拡張開発であるため、jar パッケージをパッケージ化する際に、iDesktopX プラグイン ディレクトリ (%SuperMap iDesktopX%\bundles\plugin_bundles) に出力する代わりに、%SuperMap iDesktopX% のルート ディレクトリに直接出力できます
      カスタムランチャーパッケージ構成.png

4. 起動インターフェイスをカスタマイズする

  SuperMap iDesktopX対応するインターフェイスは、ユーザーが実際のプロジェクトのニーズに合わせてプログラムの起動インターフェイスをカスタマイズしやすくするために提供されています。次のコードのように、CStartupDialog クラスがカスタマイズされた起動インターフェイスです。

// 设置自定义启动界面
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();
    }
}

  上記のコードにより実装されたカスタム起動インターフェイスの効果は以下の通りですが、カスタム起動インターフェイスの実装は一例であり、実際のプロジェクトの状況に応じてユーザーがカスタマイズすることができます。
iDesktopX カスタム起動インターフェイス.png

5. 起動後のアクションをカスタマイズする

SuperMap iDesktopXインターフェイスがロードされると、  ThreadUtilties.executeAfterDesktopVisibleバインドされたイベントがトリガーされ、以下に示すように、ユーザーはこのイベントで指定されたロジックの実行を直接実装できます。iDesktopX が起動すると、指定されたワークスペースをロードしてシーンを開きます。

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

iDesktopX の起動後に、指定されたワークスペース シーンを自動的に開きます。gif

6. 起動方法を変更する

  SuperMap iDesktopX1. Bat (Windows) / sh (Linux) スクリプト起動、2. exe (Windows) 実行可能プログラム起動の 2 つの起動方法を提供します。Windows オペレーティング システムを例に、2 つの起動方法におけるカスタム スタートアップ プログラムの適用について説明します。

  • iDesktopX 起動スクリプトを変更する

    startup.batスタートアップ スクリプト  は、 iDesktopX のルート ディレクトリに提供されます。スクリプトのデフォルト構成では、スタートアップ エントリと同じディレクトリにあるiDesktop.jarが使用されます。したがって、カスタム スタートアップ プログラムCStartup.jar がパッケージ化された後、 startup.batスタートアップ スクリプトの内容を直接変更できます。

    次の図に示すように、 CLASSPATHの起動 jar パッケージと java コマンドを  変更するだけで、エントリ クラス構成を開始できます。

    iDesktopX 起動スクリプト.png を変更する

  • カスタム ランチャーを exe 実行可能ファイルにパッケージ化する

      jar パッケージを exe 実行可能ファイルにパッケージ化する方法は数多くあり、ユーザーはプロジェクトの実際の状況に応じて適切な方法を選択できます。ここでは、軽量パッケージング ツールLaunch4j を導入のために選択します。

      提供されたLaunch4j ダウンロードアドレスには、launch4j.zipプログラム圧縮パッケージとlaunch4j.xml構成テンプレートが含まれています。

    Launch4j ダウンロード パッケージ構造.png

    • launch4j.xmlファイルを %SuperMap iDesktopX% のルート ディレクトリに配置します。

    • ダブルクリックして、launch4j.exe実行可能プログラムを実行します。

    • launch4j.xmlファイルを%SuperMap iDesktopX% のルート ディレクトリにインポートします。

    • 出力ファイルJar ランタイム パスアイコンパラメータ設定を変更します

      Launch4j パラメータ設定.png を変更する

    • Launch4j がexe 実行可能ファイルを生成した後、iDesktopX のルート ディレクトリをダブルクリックして実行できます。

      exe Launch4j.png によって生成された実行可能ファイル

7. まとめ

  この記事では、拡張機能に基づいたカスタム ランチャーの開発方法、新しい拡張機能の開発から最終的なパッケージ化と使用までの完全なプロセスを詳しく紹介しますSuperMap iDesktopX。ユーザーが iDesktopX 拡張機能のカスタム ランチャーの開発を開始する際の参考として使用できます。

  さらに、このチュートリアルでは、 SuperMap iDesktopX 11i 拡張機能開発用の上記のチュートリアルに基づいて開発されたカスタム スタートアップ プログラムCStartupも提供されており、サンプル コードを直接ダウンロードして、IDEAおよびLaunch4jでコンパイルおよびパッケージ化し、デバッグして実行することもできます。

おすすめ

転載: blog.csdn.net/supermapsupport/article/details/131593343