ラベル TIps の投稿を表示しています。 すべての投稿を表示
ラベル TIps の投稿を表示しています。 すべての投稿を表示

2008年10月18日土曜日

eclipseでJavaプログラムをダブルクリックで実行できるようにする(Jarファイル化)

eclipseで作ったソフトをjarファイルとして配布したい、と思った場合の手順。

MacOS Xでも、WindowsではJRE がインストールされた状態なら、jarファイルをダブルクリックするだけでそのまま実行できるので便利になります。
現状Javaプログラムを配布するには一番いい方法ですね。

今回Mac版eclipse使ってますが、Windows版でも方法は全く同じです。

レシピ。

まず、プロジェクトエクスプローラから、該当するプロジェクトを右クリックして「Export」(エクスポート)を選択します。


「Java」の「JAR file」を選択して「NEXT」を選択。


次に、出力したいプロジェクト(プログラム)を選択し、「Browse」をクリックします。


出力先のパス(どこの、どんな名前でもOK)を入力して「Save」を選択。
画面が元に戻ったら、出力先Jarファイル名が設定されていることを確認し、「Next」を選択します。


あまり気にせず「NEXT」を選択します。


ここがミソです。
「Select the class of the application entry point」の「Main class」で「Browse」を選択します。

これはアプリケーションのメインクラスを選択する項目です。
Javaでは各クラスそれぞれにMain関数を作れるので、どれがメインクラスか指定しないといけません。


クラスの一覧が出るので、最初に実行したいクラスとmain関数を選択して「OK」を選択します。
Main classに入力されたクラスを確認して「Finish」を選択します。


普通は数個の Warningがあるのでこんな完了メッセージが出ますが、私は放っておいてます。


指定したパスに、XXXX.jarファイルが出力されます。


こんな感じで。

2008年10月14日火曜日

JAVAでフォルダ内のファイル名を一覧取得

指定したフォルダ内のファイルとフォルダ名を一覧で取得する方法です。

「C:\hogehoge」フォルダ内の全ファイル、フォルダ名を取得してみます。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list();

これでfileList[]にファイル名のリストが保存されます。

ちなみにこいつは取得時にファイル名で絞込みができます。
例として、下ではPDFファイルのみを抽出します。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".pdf");
}
});
案外単純。

VC++/VC++.NETでウィンドウのドラッグを禁止する

備忘録。
Visual Stuido.NETで表示されたウィンドウのドラッグ自体を禁止する方法。

// イベントを追加。(WM_SYSCOMMAND)
ON_WM_SYSCOMMAND()

// 対応する関数に、以下の処理を作成
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
if((nID & 0xFFF0) != SC_MOVE)
{
CMainFrame::OnSysCommand(nID, lParam);
}
}

nIDは下位4BitがSystemで使用されるため常にマスクしないといけないようです。
この比較ではSC_MOVE(ウィンドウ移動)を使用しています。

他にも、以下のパラメータが使用できます。
  • SC_CLOSE:ウィンドウをクローズ
  • SC_HOTKEY:ホットキーに対応したオブジェクトをアクティブにする時呼ばれます。lParam の下位ワードでアクティブになるオブジェクトのHWNDを識別します。
  • SC_HSCROLL:水平スクロールする時
  • SC_VSCROLL:垂直スクロールする時
  • SC_MAXIMIZE (または SC_ZOOM):最大化する時
  • SC_MINIMIZE (または SC_ICON):最小化するとき
  • SC_KEYMENU:キーボードからメニューを呼び出した時
  • SC_MOUSEMENU:マウスクリックでメニューを呼び出した時
  • SC_MOVE:ウィンドウの移動時(ドラッグも)
  • SC_NEXTWINDOW:次のウィンドウに移動する時
  • SC_PREVWINDOW:直前のウィンドウに移動する時
  • SC_RESTORE:通常の位置とサイズにウィンドウを戻す時
  • SC_SCREENSAVE:スクリーンセーバーを実行する時
  • SC_SIZE:ウィンドウのサイズ変更
  • SC_TASKLIST:タスクマネージャのアプリケーションを実行する時

どうやらそれぞれの処理をする直前に呼ばれるようです。

2008年10月10日金曜日

[ VC++ ] VC++でフォルダ丸をごとコピーする方法

Windows用のプログラムです。

C++でのフォルダ丸ごとコピーの方法。
私は以下のような関数を作って、fromに元のパス名、toにコピー先のパス名を入力するようにしています。

WindowsAPIを使っているので、CString部分をTCHARとかで書き換えればVC以外でも動くはず。

ソース。
int folderCopy( CString from, CString to )
{
SHFILEOPSTRUCT tSHFile;
tSHFile.hwnd = ::GetDesktopWindow();
tSHFile.wFunc = FO_COPY;
tSHFile.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;
tSHFile.fAnyOperationsAborted = TRUE;
tSHFile.hNameMappings = NULL;
tSHFile.lpszProgressTitle = "";

// パス名のCStringの末尾に\0をつけて設定
from += "0";
to += "0";
from.SetAt( from.GetLength()-1, NULL );
to.SetAt( to.GetLength()-1, NULL );
tSHFile.pFrom = from;
tSHFile.pTo = to;

return SHFileOperation( &tSHFile ); // 実行
}

こんな感じで。