To Home
Last modified: Sat Mar 28 11:16:08 JST 2009

java

リンク切れがいっぱいあります m(_ _)m

雑多なメモ

ネットワーク

javaの魅力と言えばオブジェクト指向とネットワーク。javaでネットワークプログラムを書いてみよう。 というわけで、ここではHTTP接続の流れについて説明する。大まかなながれは以下のようになる。
  1. URLオブジェクトを生成。URL指定
  2. URLから指定したURLへの接続オブジェクトを取得
  3. リクエストメソッドを設定(defaultでGET)
  4. 接続(connect())
  5. 接続オブジェクトからストリームを取得
  6. 読み書き
  7. クローズ

サンプルプログラム(Client.java)
HTTPによる通信のサンプルプログラム(Http.java)

おんなじの二回かいとるし。

ファイル入出力

ファイルへの書き出しはFileOutputStreamを使う。バイト配列をwriteメソッドで書き出す。 PrintStreamでラップすることにより、System.outのようにStringを書き出すことが出来る。

サンプルプログラム(IO.java)
重宝する行読み込みテスト FilePathTest.java
  実は違うものをテストしていたのだが。

java.lang.reflect

メソッド、フィールドをオブジェクト化して動的に扱う事ができる。あるクラスの、 あるメソッドをオブジェクト化して、メソッドの引数に渡したり、配列に入れたり etc ..

  reflection.tar.gz
  Methodオブジェクトは invoke で起動
  Class.forName でクラス名からクラスオブジェクトをとってくる。

jar

サンプル inherit.jar
> jar cvmf MANIFEST.MF inherit.jar inherit/*.class
マニフェストが追加されました。
inherit/Child.class を追加中です。(入 = 253) (出 = 207)(18% 収縮されました)
inherit/M.class を追加中です。(入 = 721) (出 = 441)(38% 収縮されました)
inherit/Parent.class を追加中です。(入 = 353) (出 = 249)(29% 収縮されました)
> java -jar inherit.jar
Parent: Parent
Child : Child
マニフェストファイルでメインクラスを指定しているので、メインクラスは指定しなくても 実行できる。Main-Class: inherit.M とマニフェストに書く。改行を忘れずに入れよう!!
メインクラスを指定しない場合は以下のようにjarファイルの作成、実行をする。
> jar cvMf inherit.jar inherit/*.class
> java -cp inherit.jar inherit.M
Parent: Parent
Child : Child

getopt

arenn's Software Download (GNU getopt - Java port)

  GetoptTest.java

メモ

namazuでAPIサーチ
  マニュアルのnamazu indexを作成するときにお勧めなオプション
  > mknmz --exclude='.*use-.*' --exclude='.*index.*' api

サンプルコードをnamazuでサーチ
  サンプルコードからはじめたいときは多々ある。
  > mknmz --allow='.*(html|java)$' /usr/java/j2sdk1.4.1_01/demo/
  java は明示的に入れてあげないとインデックス作成の対象にならない。

javadoc
起動例
  javadoc -locale en -private -d doc -sourcepath . -subpackages com
-locale オプションはオプションの中で最も左でなければならないらしい。
com 以下のソースに対して javadoc を生成する。
private proctected メンバを含んだjavadocを生成する。(内部を知りたいときにでも)

Thread.dumpStack
  どこから呼び出されたかをデバッグように表示するのに使う。
  Thread.currentThread().dummpStack();
  そう、現在のスレッドを得るのって Thread.currentThread()

サンプル集

  1. hello world (hello.java)
  2. 乱数生成(RandomUsage.java)
  3. アプレットからブラウザが見ているドキュメントを 変更する。(Applet.getAppletContext().showDocument(URL)の使用)
  4. たとえば、テストプログラムの雛型作成 inherit_static.java
  5. いや、ただ配列のリテラルはこう書くんだって確かめただけです。 array_literal.java
  6. いや、ただfloatのリテラルはこう書くんだって確かめただけです。FloatLiteral.java
  7. いや、ただlongのリテラルは...。LongLiteral.java
  8. コメントにある通り。そして、コメントを英語で書く練習 Initialize.java
  9. 複数行にわたる文字列リテラルは単純に書いちゃいけないんですか? PrintSomeLinnes.java
  10. getClass ってなんだろう。WhatsGetClass.java
  11. うにゅ、これはよかったんだっけ? printInt.java
  12. HashSetをつかってみた HashSetTest.java
  13. 今度はjavaで。VCGのサブセットを読みこむ VCGReader-java.tar.gz
    参考 javaCC
  14. TreeMapを使ってみた。get / put TreeMapTest.java
  15. そう、splitは正規表現絡み。 1.4から SplitTest.java
  16. 簡単な文字区切り MySplit.java
  17. 現在の時刻を得る。long型なので差をとることで時間計測にも使える System.currentTimeMillis Time.java
  18. getFile()ってこーゆーこと? URL_getFile.java
  19. TreeMap でも iterator がほしい!! ときはいったん Collection を経由 m.values().iterator() で得られる。 MapIterator.java
  20. ファイルへのオブジェクト書き込み(Serialize)と読み込み Save.java
  21. Unicodeってなぁに? Unicodeを出力する utfstr.java
  22. 多次元配列 ConstantTable.java
  23. 配列を確保するにはその要素にデフォルトコンストラクタが必要なのかな? AllocateArray.java
  24. 配列はObjectの子供!? Arrayisobject.java
  25. Thread MyThread.java
  26. Reflection。メソッドオブジェクトを起動するとそのメソッドの発する例外は InvocationTargetException に ラップされて投げられる
      ReflectionAndException.java
  27. 同期 notify & wait Wait_and_Notify.java
  28. 他のThreadの終了を待つ。 join Join.java
  29. 直接は実行できません。だってmainがパッケージローカルですもの。NotPublic.java
  30. virtual万歳 WriteInherit.java
  31. synchronized メソッドはメソッドを起動するオブジェクトに関連しているロックをとるんだったよなぁ。 提供された synchronized なメソッドのみを介して (つまりフィールドを直接参照しないで) オブジェクトの状態を変化 させるのをモニタというのです。オブジェクトとそれに関連づけられたロックがはっきりしていいですね。 さて、staticな synchronized メソッドはどのロックを獲得するの?? (答. クラスオブジェクトに対するロックを獲得する)ClassObject.java
  32. そりゃ国家予算 10000000000000L なんてでたら問題か。 StringOfLong.java
  33. C++のような「切りさき」現象はシリアライズをしても起きない。シリアライズは値の型情報も書き込んでいる。 ReadAndWriteInherit.java
      で、この「切りさき」現象のことを英語でなんていうんだっけ??
    //A has a field name i
    class A {
    public:
      int i = 1;
      A () { }
    };
    
    //B has fields named i and j
    class B {
      int j = 1;
      B () { }
    };
    
    void f() {
      B b();
      A a = b;
      //NG
      cout << a.j << endl;
    }
    

      上のソースをファイルにしたものkill.cc
  34. staticフィールドの初期化。static { .. } のように書ける。staticでなフィールドはコンストラクタで初期化できるもんね。
      InitializeStatically.java
  35. ネストしたクラス定義。どこまでも深く、深く、深く。 NestedClass.java
  36. swingってどんなん? GUITest.java
  37. とりあえず、こんな簡単なところから。 Hello world を swingで GUIHello.java
  38. ショーもないプログラムのオンパレード。一行読み込み ReadLines.java
  39. オンパレードは続く。 StringTokenizer を使ったトークン区切り。TokenizeString.java
  40. Socketを使用した通信。送信側と受信側で送信する値の型に同意がとれていないとどうなるか? IrreguralSend.java
  41. 継承とメソッドのsignature InheritException.java
  42. JEditorPane でエディタをつくってみた Edit.java
  43. 窓もSerialize可能!! デザインした窓そのものがデータとして保存できる。SerializeGUI.java
  44. これぞ望んでいたレイアウト。 2sdk1.4.1_01/demo/jfc/SwingSet2 の コードを参考にした GUILayout.java
  45. キー押下の捕捉 GUIandAction.java
  46. 簡単なチャットをつくってみた。しかも二人限定 javachat-2003-08-27.tar.gz
      TODO: 終了処理
  47. Serializable or not? コマンドライン引数に与えられたクラス名(パッケージ名を含めなければならない) が直列化可能かを表示する SerializableOrNot.java
  48. 匿名内部クラスってこんな書き方をする。関数型言語だったら関数を渡して単純に すむが、オブジェクト指向だとこんなものを持ち出すことになる。 AnonymousInternalClass.java
  49. ちょっとアプレットをつくってみたくなって、それの前段階 NewsTicker.java
  50. 1.4 から自分のネットワークインターフェイスに割り当てられているIPアドレスを取得 できるようになった。 NetworkInterface WhatsMyName.java
  51. アドレスの種類 WhatsLinkLocalAddress.java
  52. 自分のアドレス!? MyNameIs.java
  53. GUI編 JList JListTest.java
  54. XMLをパーズした。 SAX をつかってみた。 ParseXML.java
      SAXParserFactory がファクトリーパターンちゅうやっちゃな。newInstance でインスタンスを生成する。コンストラクタは protected で外から呼べなくなっている。
  55. HTTPでの取得してXMLをパーズする ParseRemoteXML.java
  56. リモートのXMLを取得してパーズ。appletで表示する。jantenna-2003-09-11.tar.gz
      pop, apop 対応のbiffを追加
  57. フォントの設定。使えるフォントをみるためのツール (?) として、 $JAVA_HOME/demo/jfc/Font2DTest/Font2DTest.jar がある BeautifulHello.java
  58. FlowLayout でひたすら並べる。InteractiveScript.java
      うーむ。座標指定して並べるものってあるのかな。
  59. Java プログラムをコンパイルして jar ファイルを作る Makefile の雛型。 Makefile.Java
    使い方の例
      make -f ~/lib/emacs/template/Makefile.Java ARCHIVE=javaccparser.jar SOURCES='*.java' MANIFEST=JavaCCParser.MF
  60. MD5 JavaMD5.java
  61. Dialog と JPasswordField JDialogTest.java
  62. SAXとはちがって、こちらはDocumentの木を扱うXML処理 (DOM = Document Object Model) AmazonAki.java
  63. DOM なものはないのかなぁ。。。HTMLのパーズ HTMLTreeView.java
      javaでの HTMLのパーズについて Java Programming: How to Parse a HTML File ?
  64. javaでの HTMLのパーズして JTree で木表示。でかくなるから JScrollPane を使って表示 HTMLTreeView2.java こんな感じ
      ん、 a タグとか li とかは。。。。
  65. DefaultTreeModelが鍵。それぐらいしか理解してない。 JTree 編集EditTree.java
  66. アドホックだけど、それなりにいいものができた!! HTMLのパーズ、木表示など。 html-tree-2003-09-26.tar.gz / Java Web Start バージョン
      XMLの形式を変更。変更前は恥ずかしいものを書いてました (汗) html-tree-2004-01-10.tar.gz
      InputStreamReaderのエンコードに JISAutoDetect を指定して文字コードの自動判別を行うように変更した。これで Shift-JISも化けない
      タグのカスタマイズ (blocked? implied? MyHTMLDocument, MyHTMLEditorKit のあたりで定義)
  67. キーリスナーとマウスリスナー KeyTest.java, MouseTest.java
  68. JToolTip & JList TipsTest.java, ListTest.java
  69. Hashtable HashtableTest.java
  70. POST PostTest.java, post-2003-09-13.tar.gz
  71. GridBagLayout ってちょっとわかりにくい。でもこれが一番使いたかったレイアウト GridBagLayout.java, ButtonLayout.java
    比較対象 RecordGUI.java
  72. JMenu MenuTest.java
  73. 一時ファイル生成 TempFile.java
  74. 検索。でも(swingのJTreeが)バグってるような。。。。TypeAheadTree.java
  75. 削除できる JTree DeletableTree.java
  76. 表示するときに色づけ。 SwingSet2のソースを拝借 (笑) javaviewer-2003-09-27.tar.gz
  77. プロセスを起動。子プロセスとはストリームを介して通信する ExecuteCommand.java
  78. instanceof で動的にオブジェクトの型をチェックする InstanceOf.java
  79. JTree でノードごとに描画方法を変える CustomizedTree.java
  80. リソースへのアクセス。 たとえば Jar ファイルに含めた画像ファイル、テキストファイルにアクセスする場合、ClassLoader.getResource にリソースの位置を渡して、URLをもらい、そのURLを使ってリソースにアクセスする。
      AccessJarResource.java / Java Web Start バージョン
  81. 。。。。。。ファイルの長さFileLength.java
  82. 配列確保のときの長さは long で指定 ArrayLength.java
  83. Jar ファイルの操作 ListJar.java, ListJar.jar
  84. んんん、なんか違和感のあるフォントだ AWTCool.java
  85. コンボボックス (ドロップダウンリスト) ComboBoxTest.java
  86. reflectionを使ってメソッド起動 ExecuteMyself.java
  87. 以前もかいたようなきが....。 process 起動 Hostname.java
  88. TableもあるのかっJTableTest.java
  89. なんでも Popup PostTest.java
  90. ファイル名の正規化 CanonicalName.java
  91. HTTPS接続 SSLWget.java
  92. Cでかかれた関数を呼ぶ java_and_c.tar.gz
      参考: Java Native Interface
  93. 正規表現 (regex)のサンプル RegexSample.java
  94. 音(wavファイルなど)を鳴らす PlaySound.java
    Playing Sounds のサンプルコードを小さくした
  95. javax.sound.midi を使って音を鳴らす PlayMidi.java
    Java Sound API: Java Sound Demoのサンプルコードを参考にした
  96. MIDIファイル(URL指定)を鳴らす PlayMidiFile.java
  97. MIDIファイル作成 (file typeってなんだろう。。。) RecordMidi.java
  98. enumが導入された Enum.java
  99. 使用できるフォント AvailableFonts.java
  100. 簡易Webブラウザとして使える? HTMLEditor.java

javaでかかれた大きめのアプリケーション

Zaurus SL-C3100でうごいたサンプルアプリケーション

参考書とリンク

メモ

Drawing Graphs with VGJ
  ノードのグループ化が可能
  対話的にグラフを生成出来る
JTree で遊ぶには How to Use Trees が参考になる
  The Swing Connection: Creating TreeTables: Part 2
EPP: Extensible Java Preprocessor Kit
Emacs の jdeモードで \C-c\C-v. で型を意識した補間がきく!! (jde-complete-at-point-menu)

Zaurus(SL-C3100)でJava
PJEE シミュレータ
compatibility classes
Java Programming on the Sharp Zaurus


作者: 増山隆 address
To Home
Valid HTML 4.01!