HOME研究資料室 → JavaアプリケーションをWinアプリケーションから実行

JavaアプリをWinアプリから実行

2004/1/17作成,2004/2/18改訂

目的

ダブルクリック可能なJavaアプリケーションを普通に作成すると左側のようなアイコンになる. これをWinの開発環境を使用して右側のようなアプリケーションから実行することができる. ここでは私が行った方法を解説する.

jarのアイコン

背景

jarファイルのアイコンを個々に設定することはできない. ショートカットを作成してやればアイコンを変更することはできるが, オリジナルファイルは絶対パスで参照しているためショートカットを配布することはできない. インストーラーを作成すればよいのだが,インストーラーはあまり作りたくない. そこでjarファイルを起動するexeファイルを作ってみた.

jarファイルを起動するexeファイルを作る

プログラムを作成する

以下のプログラムを作成し,アイコンを付けてビルドする.

// JavaLaunch.cpp : xxx.jar ファイルを exe から起動する
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <errno.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	int iRet;
	char path[MAX_PATH];
	char fileName[_MAX_FNAME];
	char command[MAX_PATH];
	char	*args[4];

	// xxx.exe から xxx.jar を作る
	iRet = GetModuleFileName(NULL, path, sizeof(path));
	_splitpath(path, NULL, NULL, fileName, NULL);
	strcpy(command, fileName);
	strcat(command, ".jar");

	// 新しい子プロセスを生成してJAVA を実行する
	args[0] = "javaw.exe";
	args[1] = "-jar";
	args[2] = command;
	args[3] = NULL;
	// 子プロセスと並行して親プロセスを実行する 
	iRet = _spawnvp(_P_NOWAIT, "javaw.exe", args);
	
	// メッセージボックスに文字列を表示します。
	if(iRet == -1) {
		char *message;
		if(errno == ENOENT) {
			message = "JAVA の実行環境がインストールされていないようです";
		} else if(errno == ENOMEM) {
			message = "メモリ不足です";
		} else if(errno == E2BIG) {
			message = "引数リストが 1024 バイトを超えてます";
		} else {
			message = "予期しないエラーが発生しました";
		}
		iRet = MessageBox(NULL, message, "エラー", MB_OK);
		return 1;
	}
	//iRet = MessageBox(NULL, "起動に成功しました", "やったね", MB_OK);

	// 正常終了を意味する戻り値を返します。
	return 0;
}

プログラムの解説

このプログラムでやっていることは「 hogehoge.exe を実行すると javaw.exe -jar hogehoge.jar を実行する.」 ということである.注意点としては java でなく javaw を実行することである. java を実行するとDOS窓が開いてしまう.

実行環境を整える

ビルドで出来上がった JavaLaunch.exe を jar ファイルが存在する階層に複写する. exe ファイルの名前を jar ファイルと同じ名前にする.

テストする

KitEType.exe をダブルクリックして KitEType.jar が実行できれば動作確認完了.

課題

jar ファイル名が変わっても exe ファイルの名前を変更するだけでソースコードの変更は不要である. しかしアイコンを変更するためにはリソースファイルの変更が必要となる. ここを何とかしたかったが, 結局ここが何とかできればこのプログラムの存在価値がなくなるような気がする.

その後の変更

現在はこのソースにもう少し手を入れてあります.改善点は次の通りです.

HOME研究資料室 → JavaアプリケーションをWinアプリケーションから実行

Copyright (C) 2003-2004  みつみソフト,  323@kibi2.com