Java関連

文字列

  • 文字列の分割(ピリオドの前後で分割する場合)
    • splitの引数は正規表現であることに注意。わたしの環境ではなぜか"\."でうまくいかず。
      String[] sarray = s.split("\\.");

配列

  • 配列のコピー
    System.arraycopy(x, 0, x, 1, x.length-1);
引数内容
1もとの配列
2開始位置
3転送先の配列
4転送先配列の開始位置
5コピーされる数

パタン

  • Javaで(AWTなどとは別に)独自にイベントを発生させる場合
  • 事例としては、あるクラスAがメンバとしてスレッドBを持っている。
    ここではスレッドBのクラス名をCallbackThreadとする。
    public class CallbackThread extends Thread implements Runnable {
     ...
    }
    このスレッドBのコードの中の、ある決まったタイミングでイベントを発生させ、これをAに通知させたい。
    これによって、Aの中で、Bと同期して何らかの処理を行わせたい。
  • このとき、まずBの中に、内部インタフェースとしてリスナーインタフェースを定義し、
    public interface CallbackListener {
     void onCallback(int value);
    }
    このインタフェースに対するメソッド(内容はAが決める)を狙いの位置に記述しておく。
    private CallbackListener callback_B;
    public void run() {
     while(true){
      *.receive(**) ; //通信処理でパケットを受け取るような処理。
      callback_B.onCallback(**.number);
     }
    }
    この際、重要となるのが、 実行側のAで宣言するCallbackListenerのインスタンスcallback_Aと、
    Bの中のローカルインスタンスcallback_Bを関連づける関数を準備しておくこと。
    void setCallbackListener(CallBackListener callback_A){
     this.callback_B = callback_A;
    }
  • 次に、Aの中では、Bとともに、 Bの内部インタフェースCallbackListenerのインスタンスを宣言しておく。
    この中で、未定義のメソッドに実際の処理を記述しておくこと。
    CallbackThread thread = new CallBackThread();
    CallbackThread.CallbackListener callback_A = new CallBack(){
     public void onCallback(int value){
      jTextField.setText("value = " + value); //同期させる処理
     }
    };
  • 最後に、AのリスナをBのリスナに渡して完了。
    thread.setCallbackListener(callback_A);
  • ポイントは、イベントのソース側で内部クラスとしてリスナーインタフェースを定義し
    イベントを受け取る側で、リスナーメソッドの中身を定義すること。

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-02-22 (水) 15:15:01 (2100d)