JavaのTIPS & FAQ集

46.

 

45.URL文字列のエンコードとデコード
 java.net.URLEncoderクラスの encode、decode メソッドを使って行ないます。

  例えばエンコードするのならば、

    String out = URLEncoder.encode("xxx & yyy");

  なような感じで行ないます。勿論 import java.net.*; は必要です。

  ところで VisualBasicのような言語にはこうしたメソッドはないらしく、自前で用意するようです。VBユーザーの方は次のサイト等を参考に手作りしているようです。

   http://www.geocities.co.jp/SilkRoad/4511/vb/urlenc.htm

44.JavaアプリをNTでプロンプトなしで起動させる。
 start javaw class-name

43. trimメソッド
 Stringの前後にあるスペースを削除する。

 String中途のスペースは削除されない。

42.SWIMGの終了のしかた
 SWINGの場合は下の40と異なります。

  frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });

 これが元々の終了法でしたが、その後改善されて下のようなコードで足ります。

  ImagePanel1 w = new ImagePanel1( "ImagePanel1" );
  w.setDefaultCloseOperation(3);

41.native2ascii

 Javaは内部文字表現としてunicodeを採用しています。そこでunicodeに変換する必要がある場合に使えるツールがnative2asciiです。

native2ascii org_file unicode_file

native2ascii -reverse unicode_file org_file

40.終了のしかた
 これはFAQかもしれません。Frameを作って右上のX印をクリックしてもJavaプログラムが終了しない。それはそのはずで、自分でイベントを拾う必要があるのです。

import java.awt.*;

class FrameQuit extends Frame {

 public quitApplication(String label) {
  setTitle(label);
  resize(120,120);
 }

 public boolean handleEvent(Event evt) {
  if (evt.id == Event.WINDOW_DESTROY){
   System.exit(0);
  }
  return(super.handleEvent(evt));
 }

 public static void main(String[] args) {
  FrameQuit f = new quitApplication("Java Frame quit");
  f.show();
 }
}

39. 実行形式Jarファイルの作り方
 実行形式Jarファイルとはファイル名をダブルクリックするあるいはコマンドラインで java -jar hogehoge.jar として実行可能なJarファイルです。これの実現のためにはJarファイル内にメインクラスを指定したマニフェストファイルを入れてあげます。具体的には例えばhogehogeクラス場合、下記の文を含むテキスト(manifest.txt)を作ります。

Main-class: hogehoge

 更に次のコマンドでJarファイルを作ります。

jar cvmf manifest.txt hogehoge.jar hogehoge.class

2004/09 下記は新情報

manifest.mfの中身

Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-class: hogehoge

jar cvmf manifest.mf hogehoge.jar hogehoge.class

38.WARファイルとは?

J2EEで規定するWARファイル(Web ARchive [WAR])には次のファイルを格納する。

−JSPファイル
−サーブレットのクラスファイル
−上記2種類のファイルが参照するクラスファイル
−静的コンテンツ(HTMLイメージやイメージファイル、サウンドファイルなど)
−Javaアプレット
−WebコンポーネントDDファイル


ここにWebコンポーネントDDファイルとは、Webアプリケーションサーバ上でJSPページやサーブレットをハイチする際に必要となる以下の情報を記載。

−Webコンポーネントの名前
−JSPページのファイル名やサーブレットのクラス名
−サーブレットの初期化パラメタ
−セッションタイムアウト
−初期画面、エラー画面のページ名
−セキュリティ情報


WARファイルは更にEnterprise BeanとそのDDファイルを収めたJARファイルや、アプリケーションの配置情報を記したXML文書とともに、EAR(Enterprise Application Archive)ファイルに格納する。

37. Javaで外部コマンドを使うには?
java.langパッケージのRuntimeクラスを使います。例えばNTだとこんな感じです。勿論セキュリティの問題でアプレットで動くことは原則ありません。

import java.io.*;

public class Jexec {

 public static void main(String argv[]){
  try{
   Runtime.getRuntime().exec("c:\\winnt\\system32\\cmd /c copy src dest");
  } catch (IOException ex){
   System.out.println(ex);
    }
 }
}

36. Appletから他frameにhtmlを呼ぶには?
 下記のような例となります。ところがIEではうまく動くもののNetscapeでは新しいWindowを開いて、期待通りとはなりませんでした。もしNetscapeでも同じhtml内の別frameにhtmlを呼ぶ方法をご存知であれば是非知らせて下さい。

------------- UrlLink.htm ---------------------
<HTML>
<HEAD><TITLE>UrlLink</TITLE></HEAD>
<FRAMESET COLS = "50%,50% " >
 <FRAME SRC="hidari.htm" NAME="hidari" RESIZE>
 <FRAME NAME="migi" RESIZE>
</FRAMESET>
<NOFRAMES>
<BODY>
<P>
</BODY>
</NOFRAMES>
</HTML>

------------- Hidari.htm ---------------------
<HTML>
<HEAD><TITLE>Hidari</TITLE></HEAD>
<BODY BGCOLOR="#99FFFF">
<CENTER>
<P><APPLET CODE="UrlWindow.class" WIDTH="256" HEIGHT="256" ALIGN="BOTTOM">
</APPLET>
</P>
<P>Click Upper Applet Area</P>
<P>Then Open NewURL to Right Frame
</CENTER>
</BODY>
</HTML>

-----------------------UrlWindow.java------------------------------------
import java.applet.*;
import java.net.*;
import java.awt.*;

public class UrlWindow extends Applet{

  URL ozawa = null;

  public void init(){
    try{
      ozawa = new URL("http://member.nifty.ne.jp/~ozawa");
      }
    catch (MalformedURLException e){
      System.out.println("Error:" + e.getMessage());
    }
  }

  public boolean mouseDown(Event evt, int x, int y){
    getAppletContext().showDocument(ozawa,"migi");
    return(true);
  }
}

35.finalキーワード

finalキーワードはその使われ方で次のような意味を持ちます。

classの場合   サブクラスを作れない
methodの場合  オーバーライドされない。
variableの場合 定数

34.Jar コマンドの使い方
いくつかのファイルから、JARファイルをつくるには、jarコマンドを使います。 jarコマンドは、UNIXで良く使われる
tar コマンドと同じオプションが使えます。 jarコマンドの第一引数には、次のオプションの組み合わせを指定する必要があります。

 c JARファイルを生成(Create)します。f指定がなければ、標準出力へ。
 t JARファイルの中身のテーブル(Table)を表示します。f指定がなければ、
   標準入力の内容のテーブルを表示します。
 x JARファイルから元のファイルを引き出し(eXtract)します。
 f 第二引数が、c,t,x の操作の対象となるJARファイルとなります。
 v Verbosオプションです。

これらのオプションとは別に、jarコマンドの引数には、三つの種類のファイルが 登場します。

 manifest ファイル。これは、オプショナルで、なくても構いません。
 JARファイル。
 JARファイルにまとめられるファイル。

典型的な使い方は、次のようなものです。

classファイルをmyjarfileに格納する。
 jar cf myjarfile *.class

test.jarを解凍する。
 jar xvf test.jar  

33.アプレットタグの属性
CODEBASE アプレットのクラスファイルが格納されていたディレクトリ名またはURL指定する。
CODE   必須。アプレットのクラス名を指定する。
WIDTH   必須。アプレットの初期ウィンドウ幅を指定する。
HEIGHT  必須。アプレットの初期ウィンドウ高さを指定する。
ALT    Java未対応のブラウザで代替表示するテキストを指定する。
NAME   アプレットのインスタンスに名前を付与する。
ALIGN   ページ上でのアプレットのアラインメントを付与する。
VSPACE  アプレットの上下に取るマージンを指定する。
HSPACE  アプレットの左右に取るマージンを指定する。
PARAM   アプレットに名前を指定して引数を渡す。

例えば codebase を使えば他のURLにあるAppletも使えます。

 例:ルービックキューブ

  <APPLET CODEBASE="http://www.npac.syr.edu/projects/java/magic/"
  ARCHIVE="Magic.zip" CODE="Magic.class" WIDTH="348"
  HEIGHT="384" ALIGN="BOTTOM">
  </APPLET>

32.LayoutManagerには何があるか?
LayoutManagerで用意されているLayoutには次の5個があります。

1.BorderLayout 中央と上下左右の5ケ所に配置します。
2.CardLayout ちょうどカードをめくるように、部品の中の一つだけが表示されるようにします。
3.FlowLayout 文字を行につめていくように部品の左から右に配置します。
4.GridLayout 格子状に部品を配置します。
5.GridBagLayout 見えない格子の上に部品を配置します。格子の間隔を変えたり、部品が複数のマスタを占めるようにできます。いろいろな設定ができる自由度が高いLayoutManagerです。

31.可変の配列Vectorの使い方

普通の配列に対し、Vectorは大きさが変わる配列です。

import java.util.*;

public class test {

public static void main (String args[]){

Vector v = new Vector();
v.addElement("a");
v.addElement("b");
System.out.println(v);

}

}

30.使えるFontを調べるには?

import java.awt.*;
import java.applet.*;

public class Font_t extends Applet {

public void init() {

setLayout(null);
Toolkit tk = Toolkit.getDefaultToolkit();
String[] list = tk.getFontList();
for (int i = 0; i < list.length;i++) {

System.out.println(list[i]);

}

}

}

29.長方形に色を付けるには
fillRectメソッド単体で色付けは出来ません。よって直前でsetColorにて色を宣言します。

例)
   g.setColor(Color.cyan);
   g.fillRect(0, 0, 500, 40);

28.マウスイベントの使い方
例)
  public boolean mouseDown(Event ev,int x,int y){
   if(x>50 & x<100 & y>300 & y<320){
      flg = 0;
   }
    if(x>50 & x<100 & y>360 & y<380){
      flg = 1;
    }
     return true;
   }

x, yにはそれぞれmouseDown発生時のx,y座標が入いる。範囲で指定してフラグを立てればアクションを行なえる。

27.synchronizedメソッドとは
 synchronizedされたメソッドがstaticメソッド(クラスメソッド)の場合、クラス単位で排他制御が行われます。これはマルチスレッドでJavaを使う場合、同一メソッドが同時に複数走ることで生じる不都合を回避するために使います。

26.repaintメソッド
アプレットでrepaintメソッドを呼び出すと、

  repaint() --> update() -->paint()

の順で呼び出されます。update()はアプレット全体を背景色で塗りつぶしてpaint()を呼び出します。

25.JavaWebServerとは?
Sun microsystems社製作のWebサーバーでその殆どがJavaで書かれている。期間限定版を同社のサイトからダウンロード可能。JavaWebServerの最大の特徴は、サーブレット機能を標準で備えている点であり、特別な組込作業をする事なく、Java Servletを利用する事が出来る。

24.メソッドのオーバーロード
同じ名前のメソッドでありながら引数(数、型、並び方)が異なると、それに応じて異なったメソッドを定義可能であり、これをメソッドの「オーバーロード」と言います。

例 int Calc(int a,int b);
double Calc(double a,double b);

23.オブジェクト指向とは
オブジェクト指向は1980年代にSmallTalkという言語を使ったプログラムの作り方として広く知られるようになったもの。オブジェクト指向ではオブジェクト(object)とそれに対して送られるメッセージ(message)だけで全ての動きを表現します。オブジェクトとは1つの実体として頭に描ける概念を表現したものです。一方メッセージとはオブジェクトが持つ機能を動作させるための要求のことです。

22.Javacコンパイル時のエラーメッセージの取得
(1) Windows NTの場合

javac Hello.java 2> error.txt

(2) Windows 95/98の場合(JDK 1.1)

javac -J-Djavac.pipe.output=true Hello.java > error.txt

(3) Windows 95/98の場合(JDK 1.2)

javac -Xstdout Hello.java > error.txt

21. native methodとは
Java以外のプログラミング言語で書かれたメソッドの事。記述にはCかC++が良く使われる。キーワード native を使う。
native void m();

20.モディファィヤとは?
モディファイヤとは、クラスやインタフェースやメソッドや変数の宣言部分に指定することで、クラスやインターフェースやメソッドに対してアクセス制御等の付加的な意味付けを行なうための下記キーワード

public, protected, private, abstract, static, final, synchronized, native

19.シリアライゼイションとは
Javaのオブジェクトの状態を後で復元できるようなデータ列にすることをオブジェクト・シリアライゼイション(Object
serialization)、または単にシリアライゼイションという。シリアライゼイションを利用すれば、インスタンスの状態をファイルに保存したり、ネットワークを介してインスタンスを転送することが可能となる。RMIやJavaBeansなどの標準APIでも利用されている。

18.スタブ・スケルトルとは
スタブ
リモートオブジェクトの呼出しや、リモートオブジェクトへ渡すデータのマーシャリングを行なう代理オブジェクト。リモートオブジェクトのソースコードに、JDKに含まれるRMIスタブコンパイラ(rmic)を実行することにより、自動的に生成される。

スケルトン
スタブからの呼出し応答し、スタブから渡されたデータのアンマーシャリングを行なう。代理オブジェク、スケルトンはアンマーシャリング完了後、リモートオブジェクトのメソッドを呼び出しその処理結果をクライアントに返す。スタブ同様、JDKに含まれるるRMIスタブコンパイラ(rmic)を使用することにより自動生成される。

17.マーシャリング・アンマーシャリングとは
マーシャリング
オブジェクトなどのデータの内容を、ネットワーク経由で送信出来るようにバイトストリームに変換する処理。
アンマーシャリング
バイトストリームから、オブジェクトなどのデータを復元する処理。

16.this と super
this はクラス定義内で、そのクラスのオブジェクト自身を表すための キーワードです。
メソッドの引数として自分自身のオブジェクトを渡したり、 ローカル変数との名前の衝突を解消する場合などに用いられます。

super はクラス定義内で、そのクラスのスーパー・クラスの機能を 呼び出すために用いるキーワードです。
super.init() のようにして、スーパー・クラスで定義されたメソッドを 呼び出すことを可能にします。 super() はスー
パー・クラスのコンストラクタを呼び出します。

15.パッケージ宣言とは
パッケージ宣言は次の二つの目的のために行ないます。

・作成したクラスやインターフェースを登録するパッケージを定義する。
・利用したいクラスやインターフェースが格納されているパッケージをコンパイラに知らせる。

package パッケージ名1. パッケージ名2. パッケージ名;

パッケージはピリオドで区切られたパッケージ名で記述された階層的なディレクトリ構造となっています。
これらのパッケージ名はファイルシステムのディレクトリ名と一致しています。

14.throws節とは
メソッドが自分のメソッドの中で例外を発生する可能性があるが、その例外処理を自分で行なわないで、自分をコールした親メソッドに任せる場合にthrows節を使う。

public static void main(Sring args[]) throws IOException

13. サーブレットはどのサーバー/ISPで使えますか?
サーバー

JavaWebServer
Jigsaw(http://www.w3.org/Jigsaw/)
jserv(http://java.apache.org/) + Apache
JRun(http://jrun.com/) + Apaxhe,IIS,Netscape
ServletExcec(http://www.newatlanta.com/) + IIS,Netscape
Websphere(http://www.software.ibm.com/webservers/appserv/) + Apache,IIS,Netscape

ISP

SISネット(http://www.sis.ad.jp/)で利用可能。

12.背景色を変えるapplet

---- RedBack.java ------
import java.applet.Applet; // アプレットのベースとなるクラス
import java.awt.Color; // 色のデータを扱うクラス

/** オレンジ色の領域のクラス RedArea の定義 */
public class RedBack extends Applet {
/** 初期設定を行うメソッド(生成時に自動的に呼ばれる)*/
public void init() {
setBackground( Color.red ); // 背景色を赤色にする
}
}

---- ReaBack.html -----
<HTML>
<TITLE>RedBack</TITLE>
<H1>
RedBack アプレットのサンプル
</H1>
<P>
<APPLET CODE="RedBack.class" WIDTH="540" HEIGHT="4">
</APPLET>
</HTML>


11. サーブレットでの文字化け回避するには

UnicodeをJIS変換する。

具体的にはエンコード付きのストリームWriterを作成し、MIMEでcharset=iso-2022-jpを指定します。

PrintWriter out = new PrintWriter(new BufferedWriter(new
OutputStreamWriter(res.getOutputStream(),"JIS")));

res.setContentType("text/html; charset=iso-2022-jp");

10. Javaのテストは何を使ってするか?
JDKの場合です。

appletのテストにはappletviewerを利用します。

servletのテストにはservletrunnerを利用します。

9.classファイルの転送方法
<APPLET CODE="xxx.class" archive="xxx.jar" WIDTH="www" HEIGHT="hhh" >

重要なのはarchive指定でjarファイル化されたclassファイルを転送出来る点です。

8.LinkButtonの作り方


-----LinkButton.java------
import java.applet.*;
import java.awt.*;
import java.net.*;

public class LinkButton extends Applet {

URL url;
public void init(){

String spec = "http://member.nifty.ne.jp/~ozawa/";
String label = "ozawa";
try {

url = new URL(spec);

} catch (Exception e){

url = getDocumentBase();

}
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add("Center",new Button(label));
add(p);

}

public boolean mouseEnter(Event ev,int x,int y) {

showStatus(""+url);
return true;

}

public boolean mouseExit(Event ev,int x,int y) {

showStatus("");
return true;

}

public boolean action(Event ev,Object what) {

getAppletContext().showDocument(url);
return true;

}

}

-----LinkButton.html------
<HTML>
<HEAD><TITLE> Link Button </TITLE></HEAD>
<BODY>
<APPLET CODE="LinkButton.class" WIDTH=150 HEIGHT=100></APPLET>
</BODY>
</HTML>

7.AWTの使い方

単純なAWTのサンプル


import java.awt.*;
import java.applet.*;

public class xxx extends Applet {

public void init() {

setLayout(null);
setSize(426,296);
button1 = new java.awt.Button();
button1.setLabel("追加");
button1.setBounds(168,12,84,30);
button1.setBackground(new Color(12632256));
add(button1);
label1 = new java.awt.Label("氏名");
label1.setBounds(24,60,48,24);
add(label1);
textField2 = new java.awt.TextField();
textField2.setBounds(108,60,254,24);
add(textField2);

}

java.awt.Button button1;
java.awt.TextField textField1;
java.awt.Label label1;

}

6.Audioクリップで音を出す。


---- Audio.java --------------
import java.applet.*;
import java.awt.*;
public class Audio extends Applet {

AudioClip audio;
public void init() {

audio = getAudioClip(getCodeBase(),"spacemusic.au");
setLayout(new GridLayout(1,3));
add(new PlayButton(audio));
// add(new LoopButton(audio));
// add(new StopButton(audio));

}


public void stop(){

audio.stop();

}

}

class PlayButton extends Button{

AudioClip audio;
public PlayButton(AudioClip audio){

super("PLAY");
this.audio = audio;

}


public boolean action(Event ev,Object what){

audio.play();
return true;

}

}

---- Audio.html -----
<HTML>
<HEAD>
<TITLE> Audio applet </TITLE>
</HEAD>
<BODY>

<APPLET CODE="Audio.class" WIDTH=150 HEIGHT=100></APPLET>

</BODY>

</HTML>

---- spacemusic.au ---
JDKのdemoのAnimatorディレクトリにあります。

5.Horbのサンプルは


http://ring.etl.go.jp/openlab/horb-j/

Server.java

このオブジェクトはリモートから実行されます。サーバオブジェクトは同 時に複数のクライアントに対しサービスを行うことが可能です。

class Server {

String greeting(String name) {
return "Hello, " + name + "!";
}

}

Client.java

Client クラスは Server クラスのオブジェクトをリモートオブジェクトと してインスタンス化し、そのメソッドを呼び
出します。


class Client {

public static void main(String argv[]) {

Server_Proxy server = new Server_Proxy("horb://host.etl.go.jp:8444");
String result = server.greeting("World");
System.out.println(result);

}

}

セッション例


ホスト host.etl.go.jp において

% horbc Server.java
% javac Client.java
% cp *.class /net/client/home/hirano
% horb -port 8444


クライアントにおいて

% java Client host.etl.go.jp:8444
Hello, World!

%

4.JavaアプリケーションでIPアドレス求めるには?


----- MyHost.java -----
import java.net.*;
public class MyHost {

public static void main( String argv[]) {

try {

InetAddress myHost = InetAddress.getLocalHost();
System.out.println( "Machine Name:" + myHost.getHostName());
System.out.println( "IP Address:" + myHost.getHostAddress());

} catch( UnknownHostException e) {

System.err.println( e.getMessage() );
System.exit(-1);

}

}

}

Java MyHostで実行

3.JDBCドライバの4つのタイプとは?

JDBC type1 JDBC-ODBC bridge driver
JDBC type2 Native API partly-Java driver
JDBC type3 Net Protocol ALL-Java driver
JDBC type4 Native Protocol ALL-Java driver

http://www02.so-net.ne.jp/~kikuta/jdbcnote/jdbc1_4.html

2. Appletの基本セキュリティ

Appletからブラウザマシン上のファィルへのアクセス禁止
Appletが通信をおこなうのは送信ホストのみ
Appletからブラウザマシン上の他のアプリケーションを起動することは出来ない。

1.What are applets prevented from doing?

In general, applets loaded over the net are prevented from
reading and writing files on the client file system, and from
making network connections except to the originating host.

In addition, applets loaded over the net are prevented from
starting other programs on the client. Applets loaded over the
net are also not allowed to load libraries, or to define native
method calls. If an applet could define native method calls,
that would give the applet direct access to the underlying
computer.

1.アプレットのコンソールはどこにあるか

アプレット中で、printlnを実行したときはいったいどのディスプレイに表示されるのか?

アプレットで、

System.out.println("Hello");

のようにした場合、文字列はJavaコンソールと呼ばれるウインドウに表示される。
これはブラウザに用意されている。ブラウザのメニューから選択して使う。

前ページに戻る---> RETURN