ファイルが存在するかどうかをチェックし、存在しない場合は(リソースストリームをファイルにコピーすることによって)抽出するmainメソッドを作成できます。(あなたの例のように)固定されたファイルのセットだけが必要な場合、これはこれで簡単に行うことができます:
public class ExtractAndStart
{
public static void main(String[] args)
{
extractFile("TicTacToe.properties");
Application.main(args);
}
private static void extractFile(String name) throws IOException
{
File target = new File(name);
if (target.exists())
return;
FileOutputStream out = new FileOutputStream(target);
ClassLoader cl = ExtractAndStart.class.getClassLoader();
InputStream in = cl.getResourceAsStream(name);
byte[] buf = new byte[8*1024];
int len;
while((len = in.read(buf)) != -1)
{
out.write(buf,0,len);
}
out.close();
in.close();
}
}
自己解凍型アーカイブの作成者もいますが、通常はすべてを解凍してから、いくつかの内部コンポーネントを開始します。
これがどのように機能するかについての短い記事です:
http://www.javaworld.com/javatips/jw-javatip120.html
また、古くなっているように見えるZipAnywhereを使用することをお勧めします。しかし、Antインストーラーは良い代替手段かもしれません。