作者: イン
目次
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 拡張開発テンプレートに基づくプロジェクト構造は次のとおりです。
iDesktopX 拡張機能開発テンプレートに基づいて新しく作成されたプロジェクトは、iDesktopX 拡張機能開発に必要な環境依存関係をテンプレート内ですでに構成しているため、プロジェクトの環境依存関係を追加で構成する必要はなく、直接使用できます。
3.2. IDEA が新しい iDesktopX 拡張機能開発プロジェクトを作成
-
IDEA は新しい Java の空のプロジェクトを作成します
-
新しいプロジェクト
-
Javaのバージョンを設定する
-
テンプレートを選択せずに空のプロジェクトを作成する
-
空のプロジェクト構造
-
新しいカスタム パッケージを作成する
-
新規エントリークラス
-
新しいエントリー機能
-
-
iDesktopX 拡張機能開発環境の依存関係を構成する
-
iDesktopX 拡張機能開発の依存関係ライブラリを構成する
SuperMap iDesktopX
拡張開発には、次の合計 4 つの依存ライブラリ構成が必要です。- %SuperMap iDesktopX%\bin
- %SuperMap iDesktopX%\lib
- %SuperMap iDesktopX%\bundles\desktop_bundles
- %SuperMap iDesktopX%\bundles\require_bundles
-
コンフィギュレータのパッケージ化
iDesktopX スタートアップ プログラムの拡張開発であるため、jar パッケージをパッケージ化する際に、iDesktopX プラグイン ディレクトリ (%SuperMap iDesktopX%\bundles\plugin_bundles) に出力する代わりに、%SuperMap iDesktopX% のルート ディレクトリに直接出力できます。
-
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();
}
}
上記のコードにより実装されたカスタム起動インターフェイスの効果は以下の通りですが、カスタム起動インターフェイスの実装は一例であり、実際のプロジェクトの状況に応じてユーザーがカスタマイズすることができます。
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);
});
});
6. 起動方法を変更する
SuperMap iDesktopX
1. Bat (Windows) / sh (Linux) スクリプト起動、2. exe (Windows) 実行可能プログラム起動の 2 つの起動方法を提供します。Windows オペレーティング システムを例に、2 つの起動方法におけるカスタム スタートアップ プログラムの適用について説明します。
-
iDesktopX 起動スクリプトを変更する
startup.batスタートアップ スクリプト は、 iDesktopX のルート ディレクトリに提供されます。スクリプトのデフォルト構成では、スタートアップ エントリと同じディレクトリにあるiDesktop.jarが使用されます。したがって、カスタム スタートアップ プログラムCStartup.jar がパッケージ化された後、 startup.batスタートアップ スクリプトの内容を直接変更できます。
次の図に示すように、 CLASSPATHの起動 jar パッケージと java コマンドを 変更するだけで、エントリ クラス構成を開始できます。
-
カスタム ランチャーを exe 実行可能ファイルにパッケージ化する
jar パッケージを exe 実行可能ファイルにパッケージ化する方法は数多くあり、ユーザーはプロジェクトの実際の状況に応じて適切な方法を選択できます。ここでは、軽量パッケージング ツールLaunch4j を導入のために選択します。
提供されたLaunch4j ダウンロードアドレスには、launch4j.zipプログラム圧縮パッケージとlaunch4j.xml構成テンプレートが含まれています。
-
launch4j.xmlファイルを %SuperMap iDesktopX% のルート ディレクトリに配置します。
-
ダブルクリックして、launch4j.exe実行可能プログラムを実行します。
-
launch4j.xmlファイルを%SuperMap iDesktopX% のルート ディレクトリにインポートします。
-
出力ファイル、Jar ランタイム パス、アイコンパラメータ設定を変更します
-
Launch4j がexe 実行可能ファイルを生成した後、iDesktopX のルート ディレクトリをダブルクリックして実行できます。
-
7. まとめ
この記事では、拡張機能に基づいたカスタム ランチャーの開発方法、新しい拡張機能の開発から最終的なパッケージ化と使用までの完全なプロセスを詳しく紹介しますSuperMap iDesktopX
。ユーザーが iDesktopX 拡張機能のカスタム ランチャーの開発を開始する際の参考として使用できます。
さらに、このチュートリアルでは、 SuperMap iDesktopX 11i 拡張機能開発用の上記のチュートリアルに基づいて開発されたカスタム スタートアップ プログラムCStartupも提供されており、サンプル コードを直接ダウンロードして、IDEAおよびLaunch4jでコンパイルおよびパッケージ化し、デバッグして実行することもできます。