俺のためのお仕事メモ(仮) > アプレットの小技メモ

アプレットの裏技をメモしておきます。


【目次】


アプレットからローカルマシンのデータを読み込む


通常のJAVAアプレットはセキュリティの問題でクライアントマシンのファイルを操作することはできません。
しかし、以下のうらわざ?を使えばそれも可能になります。

まずは以下のアプレットのソースをコンパイルし、JARしてみてください。
このアプレットは、クライアントマシンの"C:/eclipse/workspace/AppletTest/sound/tada.au"という
音楽ファイルを再生するアプレットです。
アプレット名はAppletTest.jarにしておきましょう。
※適当なauファイルをtada.auという名前に変えて以下のフォルダに設置してください。
"C:/eclipse/workspace/AppletTest/sound/"
面倒臭いと思いますがフォルダを新規に作ってくださいw
import java.applet.Applet;
import java.awt.Graphics;
import java.io.File;
import javax.sound.sampled.*;

public class AppletTest extends Applet {
	
	//読み込みたいauファイル
	public static String filename = "C:/eclipse/workspace/AppletTest/sound/tada.au";

	//アプレット初期化
	public void init() {

	}
	
	//音楽ファイル再生メソッド
	public void playAudio(String path){
		try {
		  // Fileクラスのインスタンスを生成
		  File soundFile = new File(path);
		  // オーディオ入力ストリームを取得します
		  AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
		  // オーディオ形式を取得します
		  AudioFormat audioFormat = audioInputStream.getFormat();

		  // データラインの情報オブジェクトを生成します
		  DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
		  // 指定されたデータライン情報に一致するラインを取得します
		  SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
		  // 指定されたオーディオ形式でラインを開きます
		  line.open(audioFormat);
		  // ラインでのデータ入出力を可能にします
		  line.start();

		  int nBytesRead = 0;
		  byte[] abData = new byte[128000];
		  while (nBytesRead != -1) {
			// オーディオストリームからデータを読み込みます
			nBytesRead = audioInputStream.read(abData, 0, abData.length);
			if (nBytesRead >= 0) {
			  // オーディオデータをミキサーに書き込みます
			  int nBytesWritten = line.write(abData, 0, nBytesRead);
			}
		  }
		  // ラインからキューに入っているデータを排出します
		  line.drain();
		  // ラインを閉じます
		  line.close();

		  System.exit(0);
		} catch (Exception e) {
		  e.printStackTrace();
		  System.exit(1);
		}
	}

	//アプレット開始
	public void start() {
		AppletTest o = new AppletTest();
		//再生
		o.playAudio(filename);
	}

	//アプレット停止
	public void stop() {

	}

	//描画
	public void paint(Graphics g) {
		g.drawString("Applet is here.", 10,30);
	}
	
}
次はこのアプレットを電子署名付アプレットにします。
やり方は以下をご覧ください。
コマンドプロンプトからkeytooljarsignerというJAVAツールを使います。
まずはkeytoolを使って証明書を作成します。
以下は"store1"というキーストアに"foo"という証明書を新規作成しています。
> keytool -genkey -keystore store1 -alias foo
次はjarsignerを用いてさっき作成した証明書をAppletTest.jarに割り当てています。
> jarsigner -keystore store1 AppletTest.jar foo
以上でこのアプレットに電子署名が組み込まれました。
最後にこのアプレットを呼び出すためのWebページを作成します。
ファイル名はAppletTest.htmlとでもしておきましょう。
<html>
<pre class=coding>
<applet codebase="." 
 code=AppletTest.class 
 archive="AppletTest.jar"
 width=460 height=160>
</applet>
</html>

以上でローカルファイルにアクセスできるアプレットの完成です。
さぁ、早速試してみましょう!

※注意 アプレットを信用するかどうかのダイアログが出てきますが、 私を信用して実行してみたい場合は「はい」を押してください。 信用できない場合は「いいえ」を選んでくださいw もちろん、貴方のパソコンに何かあっても責任は持てませんよ。。。

サンプルアプレットの実行!

ちなみに、appletviewerで実行する場合はjava.policyを編集しないとダメみたいです!


Copyright (C) 2004 tanaka akira. All Rights Reserved.