青島のしま〜Blue Islands〜


Java Tips

Eclipse Tipsは別ページにあります


コンパイル時に「未チェックまたは安全ではありません」という警告が出る(エラーではないので実行はできるようです)

これは,Java5.0からは,型チェックが厳しくなったためです.
例えばCollectionクラスの1つであるVectorでは,宣言時に格納するオブジェクトの型を指定できるようになっています.
このように格納するオブジェクトの方を指定してやれば警告が消えます.

java.util.Vector;
public class Hoge{
    public static void main(String [] args) {
        Vector<String> strArray = new Vector<String>;
        strArray.add(new String("hogehoge");
    }
}

閉じるボタンを押した時の処理

JFrameなどは、デフォルトの設定では、閉じるボタンを押したときに、
見えなくするだけで、実際にプログラムを終了するわけではありません。
これを、終了するようにするためには、

JFrame.setDefaultCloseOperation()メソッドで、
JFrame.EXIT_ON_CLOSEを設定してあげることで、終了できるようになります。

サンプルコード:

f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
また、WindowsListenerを設定することでも実現できます。
サンプルコード:
frame.addWindowListener(new WindowAdapter() { 
	public void windowClosing(WindowEvent e) {System.exit(0);} 
}

ダブルバッファリング

ちらつきをなくすために、2つのイメージを使用する方法です。
ただし、JPanelなどのコンポーネントは、元々ちらつかないようになっているので、
ダブルバッファリングする必要がないです。
Graphics bg;	//バッファのグラフィックコンテキスト
Image buf,back;	//左からバッファ、背景のイメージ
buf = Component.createImage(width, height);//バッファの作成
bg=buf.getGraphics();	//バッファ描画用のグラフィックコンテキストの取得
bg.drawImage(back,0,0,this);	//背景イメージでバッファをクリア
bg.fillOval(x[i],y[i],size,size);	//ボールをバッファに描画
repaint();		//updateメソッドを呼び出す
g.drawImage(buf,0,0,this);	//バッファを画面に描画

マウスカーソルの位置を得る

マウスカーソルの位置を得るには、
MouseEventオブジェクトの、
getX()メソッドとgetY()メソッドを使用します。
public void mouseMoved(MouseEvent e) {
	x = e.getX(); 
	y = e.getY(); 
}

メニューを使用する

メニューをFrameに追加するためには、
javax.swing.JMenuBar
javax.swing.JMenu
javax.swing.JMenuItem
を使用します。
JMenuBarの中にJMenuを追加し、
JMenuの中にJMenuItemを追加します。
そして、FrameクラスのsetJMenuBar()メソッドでJMenuBarを追加します。
JMenu menu= new JMenu("File");
menu.add(new JMenuItem("Open"));
menu.add(new JMenuItem("Save"));
JMenuBar menuBar = newJMenuBar();
menuBar.add(menu);
JFrame frame = new JFrame();
frame.setJMenuBar(menuBar);

テキストコンポーネントにファイルの内容を読み込む

JTextAreaのメソッドには
read()というメソッドがあり、
これを利用すると、簡単にファイルの内容を読み込むことができます。
FileReader fReader = new FileReader("c:/java/test.java");
jTextArea.read(fReader, null);

テキストコンポーネントの文字列をファイルに出力する

JTextAreaのメソッドには
write()というメソッドがあり、
これを利用すると、簡単にコンポーネントの文字列をファイルに出力できます。
FileWriter fWriter = new FileWriter("c:/java/test.txt");
jTextArea.write(fWriter);

ファイル選択ダイアログを表示する

ファイル選択ダイアログを表示するには、
javax.swing.JFileChooserクラスを使用します。
File f = new File("."); //カレントディレクトリを指定
// ファイル選択ダイアログのインスタンス生成
JFileChooser jfc = new JFileChooser(f);
// ファイル選択ダイアログを表示する
jfc.showOpenDialog(jFrame);

アフィン変換で、座標の変換をする

Graphics2Dオブジェクトを使用すると、
アフィン変換などが利用できます。
アフィン変換を利用すると、回転、拡大などができます。
public void paint(Graphics g) {
	Graphics2D g2d = (Graphics2D)g;
	Dimension d = getSize();
	// まんなかを中心にπ(180°)だけ回転する
	AffineTransform aft = AffineTransform.getRotateInstance(Math.PI, d.width / 2, d.height / 2);
	g2d.setTransform(aft);
}

フォントの高さなどを取得

フォントの情報は、FontMetricsクラスにあります。
getFontMetrics()メソッドで、FontMetricsオブジェクトを得ることができます。
FontMetrics fm = getFontMetrics(f);
int height = fm.getHeight();
int width = fm.stringWidth(s);

Swingで丸い(円形)のボタンを作成

円形のボタンを作成するには、次のようにします。
1.描画メソッド(paintComponent())を円を描くものに置き換える
2.円の内側をクリックしたときだけボタンが反応するよう設定する

サンプルプログラム:

public class RoundButton extends JButton {
    public RoundButton(String label) {
        super(label);
        // JButton が背景を描くのを禁止して、自分で丸い背景を描画できるようにする。
        setContentAreaFilled(false);
    }
    // 丸い背景とラベルを描画
    protected void paintComponent(Graphics g) {
        if (getModel().isArmed()) {
            // 押されているときの色
            g.setColor(Color.lightGray);
        } else {
            g.setColor(getBackground());
        }
        // 円形の背景を描画
        g.fillOval(0, 0, getSize().width-1, getSize().height-1);
        // ラベルとフォーカス矩形を描画
        super.paintComponent(g);
    }
    // ボタンの境界を描画
    protected void paintBorder(Graphics g) {
        g.setColor(getForeground());
        g.drawOval(0, 0, getSize().width-1, getSize().height-1);
    }
    // クリックの検出
    Shape shape;
    public boolean contains(int x, int y) {
        // ボタンのサイズが変更されたら新しい Shape オブジェクトを作成
        if (shape == null || !shape.getBounds().equals(getBounds())) {
            shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
        }
        return shape.contains(x, y);
    }
}

コンポーネントを任意の座標に配置する

1.レイアウトマネージャをnullにします。
2.JComponent.setLocation()メソッドを使用します。

サンプルプログラム:

public class SetLocationSample extends JFrame {
	public SetLocationSample() {
		/* ボタンを任意の位置に配置する */
		setLayout(null);
		JButton button = new JButton("ボタン");
		add(button);
		button.setLocation(12,34);
		/* その他の設定 */
		setBounds(0,0,200,200);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
	}
}

画像ファイルを扱う

1.アプレットの場合
Image image = getImage(getDocumentBase(),"img.jpg");

2.GUIアプリケーションの場合
Image image = Toolkit.getDefaultToolkit().createImage("./img.jpg");

イメージの表示は、Graphicsオブジェクトに対してdrawImage()メソッドを使用します。
g.drawImage(image, 0, 0, width, height, this);

ディスプレイのサイズを得る

プログラムを動かしているマシンのディスプレイのサイズを知ることができます。
Toolkitクラスの、
getScreenSize()メソッドを使用します。
// ディスプレイサイズを得る
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int height = d.height;  // 縦の長さ
int width = d.width;    // 横の長さ

マウスカーソルを変更する

java.awt.Componentクラスの
setCursor()メソッドを使用します。
AppletクラスやFrameクラスなどはComponentのサブクラスであるため、
このメソッドを使用することができます。
つまり、マウスカーソルの変更ができます。
// 手の形のカーソルに変更する
setCursor(new Cursor(Cursor.HAND_CURSOR)); 

ダブルクリックを検出する

MouseEvent.getClickCount()メソッドで、
クリックの回数を得ることができます。
public void mouseClicked(MouseEvent e) {
	if (e.getClickCount() == 2) {
		// ダブルクリック時の処理
	}
}

マウスの右クリックを検出する

MouseEventオブジェクトには、押されたボタンを示す定数が用意されています。
BUTTON1_MASK // 左クリック
BUTTON2_MASK // 中央ボタンクリック
BUTTON3_MASK // 右クリック

右クリックの判定は、次のようにできます。

public void mousePressed(MouseEvent e) {
	if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0) {
		// 右クリックされた
	}
}
また、右クリックされたときの処理に、
JPopupMenuを表示することで、コンテキストメニューが作成できます。

コンポーネントの背景を描画する

コンポーネント自体を描画するときは、
paintComponent()メソッドをオーバーライドして、
そのなかに背景の描画処理を記述するのが一般的です。
public class MyPanel extends JPanel {
	public void paintComponent(Graphics g){
		// サイズを得る
		Dimension size = getSize();
		// 色の設定
		g.setColor(Color.blue);
		// サイズいっぱいに四角形を描く
		g.fillRect(0,0,size.width,size.height);
	}
}

2つにレイアウトを分ける

2つにレイアウトを分けるには、
javax.swing.JSplitPaneを使用します。

サンプル:

JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                          leftPanel, rightPanel);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(150);

周りのボーダーをつける

ボーダーをつけるには、
javax.swing.BorderFactoryを使用します。

サンプル:

// JComponentを継承したクラスが使えるsetBorderメソッドで
// ボーダーをセットする
leftPanel.setBorder(BorderFactory.createLineBorder(Color.black));

アプリケーションの外観(LookAndFeel)をWinows風や他のものに変える

javax.swing.UIManagerのsetLookAndFeelメソッドを使用します。

サンプル:

try{
    // 通常のJavaの外観
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    // Windowsの外観
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    // motifの外観
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}catch(Exception ex){}
// 外観を更新する。
SwingUtilities.updateComponentTreeUI(frame);

アプリケーションの左上のアイコンを変更する

普通にJFrameなどでJavaのアプリケーションを作ると、
アプリケーションの左上のアイコンはJavaのコーヒーカップになっていますが、
これを変更することができます。。
やり方は、javax.swing.JFrameのsetIconImage(Image)メソッドを使用します。

サンプル:

import java.awt.*;
import javax.swing.*;

public class IconTest extends JFrame {

    public IconTest() {
        // アイコンの読み込み
        Image image = Toolkit.getDefaultToolkit().createImage("../image/icon1.jpg");
        // アイコンをセット
        setIconImage(image);
        pack();
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        new IconTest();
    }
}

クリップボードを使用する

Toolkitクラスを使って、Clipboardオブジェクトを得ることができます。
このClipboardオブジェクトを操作してクリップボードを使用することができます。
張り付けるオブジェクトはTransferableインターフェースを実装したものなら、
何でも貼り付けることができます。

クリップボードに貼り付けるには、
Clipboard.setContents(張り付けるオブジェクト,クリップボードのオーナー)
を使用します。
クリップボードから取り出すには、
Clipboard.getContents(クリップボードのオーナー)
Transferableオブジェクトを取り出して、そのオブジェクトの
Transferable.getTransferData(取り出したいデータのタイプ)
を使用します。

サンプル(ClipboardTest.java):

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;

public class ClipboardTest extends JFrame implements ActionListener
{
    // クリップボードオブジェクト
    Clipboard clipboard;
    // コピーするボタン
    JButton copyButton;
    // 貼り付けするボタン
    JButton pasteButton;
    // テキストを表示する
    JTextArea textarea;
    
    public ClipboardTest() {
        // クリップボードオブジェクトを得る
        clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        // コンテントペインを得る
        Container contentPane = getContentPane();
        // ボタンを追加
        JPanel panel = new JPanel();
        copyButton = new JButton("コピー");
        copyButton.addActionListener(this);
        pasteButton = new JButton("貼り付け");
        pasteButton.addActionListener(this);
        panel.add(copyButton);
        panel.add(pasteButton);
        contentPane.add("North", panel);
        // テキストエリアを追加
        textarea = new JTextArea();
        contentPane.add("Center", textarea);
        
        pack();
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e){
        if (e.getSource() == copyButton) {
            // クリップボードにコピーする
            StringSelection selection =
                new StringSelection(textarea.getText());
            clipboard.setContents(
                selection, selection);
        } else {
            // クリップボードから取り出す
            Transferable trans = clipboard.getContents(null);
            String str = null;
            try{
                str = (String)trans.getTransferData(DataFlavor.stringFlavor);
            } catch(Exception ex){
            }
            textarea.setText(str);
        }
    }
    
    public static void main(String args[]) {
        new ClipboardTest();
    }
}

文字が選択されたことを知る

javax.swing.CaretListenerクラスを使用します。
インタフェースCaretListenerを実装することによって、
文字が選択された時のイベントを受け取ることができます。

サンプル:

	JTextField field = new JTextField();
	field.addCaretListener(new SelectActionTest());

// CaretLisntenerを実装したクラスを作る
public class SelectActionTest implements CaretListener {
	public void caretUpdate( CaretEvent ce ) {
		// 選択開始位置と選択終了位置を調べて、比較する。
		if ( ce.getMark() != ce.getDot() ) {
			// 選ばれたときの処理を記述する。
			System.out.println("select change");
		}
	}
}

タイマーを使ってタイムアウトを実装したい

/** タイマー呼び出しもとのクラス */
public class HogeClass
{
    private boolean flag;  // フラグ
    
    public void doWork() {
        flag = false; // フラグの初期化
        //
        TimerThread timer = new TimerThread(this);
        new Thread(timer).start();

        // ぐるぐる
        while (!flag) {
            // ぐるぐる
        }
    }

    /** フラグの変更 */
    public void SetFlag() {
        flag = true;
    }

}

/** タイマークラス */
public class TimerThread implements Runnable
{
    private HogeClass m_inst; // 呼び出しもとクラスの参照
    
    /** コンストラクタ */
    public TimerThread(HogeClass inst) {
        m_inst = inst; // 呼び出しもとクラスの参照を保持しておく
    }

    /** Run オーバーライド */
    public void run() {
        // まつ
        Thread.sleep(2000);
        // フラグの変更
        m_inst.SetFlag();
    }
    
}

JavaVMが使用できるメモリ容量を変更する

-mxコマンドを使用します.
例:java -mx1000000 jp.aka-ao.test.MyClass

ファイルから文字列を読み込む

ファイルから文字列を読み込むためには、
FileReaderクラスを使用します。
さらに、ここでは、読み込む効率をよくするために、
BufferedReaderを使用します。
FileReader reader = new FileReader("c:/java/test.html");
BufferedReader bReader = new BufferedReader(reader);
String str = bReader.readLine();

文字列をファイルに出力する

文字列をファイルに出力するためには、
FileWriterクラスを使用します。
さらに、効率よく書き込むために、
BufferedWriterクラスも使用します。
出力するときは、さらに、
PrintWriterクラスが必要になります。
//FileWriterで出力先へのストリーム作成
FileWriter fWriter = new FileWriter("c:/java/test.htm");
//BufferedWriterでFileWriterをラップし、効率化
bWriter  = new  BufferedWriter(fWriter);
pWriter    = new  PrintWriter(bWriter);
pWriter.println("出力する文字列");
bWriter.close();

ファイルの操作

Fileクラスを使用すると、ファイルに対して様々な処理をすることができます。
// インスタンス生成
File file = new File(args[0]);
// ファイルの有無を調べる
if (file.exists()) {
    //絶対パスを取得、表示
    System.out.println(file.getAbsolutePath());
}
// ファイルの削除
file.delete();
// ディレクトリの作成
File dir = new File("c:/home/newdir/");
dir.mkdir();
// ディレクトリの削除
dir.delete();
// ファイル一覧の取得
File dir2 = new File("c:/home/");
String[] strs = dir2.list();

カンマ区切り文字列などを解析したい

CSVファイルなどを読み込んで使用することができます。
これには、
java.util.StringTokenizerクラスを使用します。

以下が、コンマを区切る処理のサンプルです。

String strLine = "data1,data2,data3"; //区切る文字
String delim = ",";  //区切り文字をコンマに設定する
StringTokenizer st = new StringTokenizer(strLine,delim);  //分解する
while (st.hasMoreTokens()) {
	System.out.println(st.nextToken());
}

sin,cosの計算を高速化する

sin関数やcos関数は、普通の演算に比べて複雑な計算をするので、
何回も繰り返して使用すると、処理に時間がかかってしまいます。
回転操作のたびに必要になるsin,cosの計算をはぶくことで、若干の高速化ができます。
回転単位を10°などに、設定することで、前もってsin cos の値を計算し、
配列に入れておくなどの工夫ができます。

乱数を扱う

java.lang.Mathクラスを使用します。

例:0から1の間の乱数を得る

double d;
Random rand = new Random();
d = rand.nextDouble();

実行速度の測定

long time1 = System.currentTimeMillis();
//時間を計測する処理を実行
long time2 = System.currentTimeMillis();
System.out.println(String.valueOf(time2-time1));
これで、現在の時間を得ることができるので、
2回使って、その差をとれば、かかった時間がわかります。

ソケットを使って、ネットワークを使用して通信をする

java.net.Socketクラスを使用すると、ネットワークでの通信ができます。
次のサンプルは、対象のホスト名のIPアドレスを表示します。
import java.net.Socket;

public class SocketSample {

    public SocketSample() {
        try {
            Socket socket = new Socket(
                "yahoo.co.jp",80);
            System.out.println(socket.getInetAddress());
            socket.close();
        }catch (Exception e){
            System.err.println(e.toString());
        }
    }
    
    public static void main(String args[]){
        new SocketSample();
    }
}

String型の配列を整列(ソート)する。

配列をソートするには、Arraysクラスを利用します。
import java.util.*;
class ArraySort2 {
      public static void main(String[] args) {
         // ソートする
         Arrays.sort(args);
         for (int i=0; i < args.length; i++) {
             System.out.println(args[i]);
         }
      }
}
ちなみに、Comparableインタフェースを実装しているクラスならば、
このようなソートができるようになっています。
J2SEのクラスには、Cmparableインタフェースを実装しているクラスがけっこうあります。

可変長Object配列を扱うVectorとArrayList

この2つのクラスは複数のObjectを格納することができ、
どちらも似たような機能を持っています。
2つのクラスの違う点は、同期があるかないかです。
Vectorは、同期があるために、同時に2つのアクセスがあった場合に一方を待たせておいて、
片方が終わったあとに処理をします。
ArrayListは、非同期なので、同時に2つのアクセスがあった場合に、
片方の記録は消えてしまうことになります。
もし同時に2つ以上のアクセスが考えられる場合は、Vectorを使うべきですね。
しかし、処理速度な非同期のほうが速いため、速度優先の場合はArrayListを使うことになります。

・Vectorの使用例:

String str = new String("abc");
JButton button = new JButton("button");
Vector vector = new Vector();
//格納
vector.add(0, str);     //0番目に格納
vector.add(1, button);  //1番目に格納
//取り出す(Object型として取り出されるために、正確な型にキャストする必要があります)
String str2 = (String)vector.elementAt(0);
JButton button2 = (JButton)vector.elemntAt(1);

int型とString型の変換

・int型をString型に変換する
String str = String.valueOf(12);
・String型をint型に変換する
int num = Integer.parseInt("12");

変数の比較について:「==」と「equals()」の違い

「==」は、オブジェクトが同一であるかを判断する。
「equals()」は、オブジェクトの中身が同一であるかを判断する。
例えば、文字列が同じかどうかを調べるには、「equals()」を使います。
一方、同一のオブジェクトであることを調べるには、「==」を使います。
つまり、2つの変数が同じものを参照しているかを調べるときは、「==」を使います。

文字列比較のサンプル:

String a = "こんにちは";
String b = "こんにちは";
if (a.equals(b)) {
    // 一致するので、こちらが表示される。
    System.out.println("OK");
} else {
    System.out.println("NG");
}
if (a == b) {
    System.out.println("OK");
} else {
    // 値としては異なるので、こちらが表示される。
    System.out.println("NG");
}

JavaからJava以外のアプリケーションを起動する

Javaのプログラムから、それ以外の外部プログラムを実行することができます。
java.lang.Runtimeクラスを使用します。
import java.io.*;
public class RunNotepad
{
    public static void main(String args[]) {
        try {
            Runtime.getRuntime().exec("c:/Windows/Notepad.exe"); 
        } catch(IOException e) {
             System.out.println(e.getMessage());
        }
    }
}

テンポラリファイルを作成

一時ファイルとしてファイルを作成し、
プログラム終了時にそのファイルを自動的に削除することができます。
//一時ファイルを作る
File temp = File.createTempFile("temp");
//終了時に削除するように設定
temp.deleteOnExit();
//上で作成した一時ファイルを出力先にする
OutputStream out = new BufferedOutputStream(new FileOutputStream(temp));
doSomething(out);
out.close();

jarファイルをダブルクリックでプログラムを実行できるようにする

jarコマンドを使うと、classファイルを圧縮して一つのjarファイルにまとめることができます。
そのときに、少し手を加えると、出力したjarファイルをダブルクリックすると
指定したクラスを実行できるようになります。
通常の使い方:jar -cvf myclasses.jar myclass1.class myclass2.class
そして、実行できるようにするには、マニフェストファイルというものを作る必要があります。
例えばmanifest.txtというファイルに
Main-Class: myclass1
と書いて保存します。
そして、
jar -cvfm manifest.txt myclasses.jar myclass1.class myclass2.class
とコマンドを実行して、
できあがったmyclasses.jarをダブルクリックすると、
myclass1が実行されます。
ちなみに、jarファイルの解凍の仕方も書いておきます。
jar -xvf myclasses.jar

javadocの使い方

javadocとは、Javaのソースコードから、APIをHTMLで出力するシステムです。
・コメントの記述方法
/**
 * このように「*」を2つつけることによって、
 * javadoc用のコメントにすることができます。
 */
また、「@」は特別な意味を持ちます。
1、クラス用コメント
@version バージョン //プログラムのバージョン
@author 作者 //作者名
@see //参照
@see "文字列" //リンクなしの文字の表示
@see label //リンク
@see  package.class#member  label //パッケージとクラス、メソッド、変数名などを指定する
@deprecated //非推奨であることを示す
@since バージョン //導入されたバージョン(JDK1.1など)
2、メソッド用コメント
@param パラメータ名 定義 //引数
@exception 絶対指定クラス名 定義 //例外
@return 定義 //復帰値
@see //上記と同じ
@deprecated //上記と同じ
3、変数用コメント
@see //上記と同じ
@deprecated //上記と同じ
・生成方法(コンソールにて)
使い方: $ javadoc [options] [packagenames] [sourcefiles] [classnames] [@files]
使用例:$ javadoc -d ./javadoc/ -windowtitle 'dailbAPI' jp.glope.dalib

CLASSPATHの設定方法

1.jre/lib/ext/ にライブラリファイル(jar)を置く。
2.set CLASSPATH=C:\java\classes
3.java -classpath c:/home/java/mylib.jar ...

staticの使い方

・1つの変数の値を共有するときに使用します。
 例:2つのアプリケーションが同じクラスのstatic変数を使うと、
   どちらも同じ値が適用される。
・また、メソッドに使用すると、インスタンスを生成しなくても使えるようになります。
 例: String.valueOf(10);
   このメソッドは、数値を文字列表現(String型)にするメソッドですが、
   インスタンスを生成しなくても、上のように使用することができます。

synchronizedの使い方

 あるインスタンスを複数のスレッドが同時に操作すると、
 お互いの動作の邪魔をしてしまう可能性がある場合に必要です。

一部だけのとき:

 synchronized(this) {
   // 同時に実行すると具合の悪い部分
 }

 synchronized(クラス名.class) {
   // 同時に実行すると具合の悪い部分
 }

class AClass {
  final Object LOCK = new Object();
  void method1() {
    synchronized (LOCK) { ... }
  }
}
class BClass {
  AClass a;
  void method1() {
    synchronized (a.LOCK) { ... }
  }
}

DLLの関数を呼び出す(Windows APIが使いたい)

Javaには,JNI(Nava Native Interface)というのが用意されています.
System.loadLibrary()を使えば,DLL関数呼び出しができます.

COMポートのシリアル通信を行う

Java Communications APIに含まれる,
・javax.comm.CommPortIdentifier
・javax.comm.SerialPort
を使う

XMLParser(SAX) の使い方(Xercesのパーサー)

SAXParser parser = new SAXParser();
setContentHandler(handler);
setDTDHandler(handler);
setErrorHandler(handler);
parser.parse(fileName);
//↑handlerを自分で作り、動作を指定する

サーブレットで、日本語の文字化けを防止する。

// その1(ふつうにHTMLに表示する場合)
// PrintWriterの取得の仕方を変える
PrintWriter out = new PrintWriter(
    new OutputStreamWriter(response.getOutputStream(), "SJIS"));
// その2(フォームから取得したデータの場合)
String value = req.getParameter("hoge");
if(value!=null){
	value = new String(value.getBytes("8859_1"), "JISAutoDetect");
}

JSPのページで、文字化けを防止する。

JSPのページで日本語を使用する場合は、
HTMLの一番最初にpageタグで文字コードを指定する必要があります。

JSPで、日本語が入ったページのサンプルです。

========= HelloJSP.jsp ========================================



HelloJSP!!


↓正しく表示されましたか?

<%
	out.println("HelloJSP!!");
%>



<%
	out.println("こんにちはJSP!!");
%>





作成日: 2005年10月09日12時52日54秒
更新履歴
2008年07月22日 2008年02月08日 2008年02月06日 2008年02月05日 2007年10月25日 2006年12月20日 2006年12月19日 2006年12月05日 2006年09月20日 2006年06月18日 2006年06月12日 2006年04月22日 2006年03月30日 2006年02月28日 2006年02月23日 2006年02月18日 2006年01月13日 2005年12月21日