2005/11/06

Javaのお勉強 (3)

「Essential Java Classes」の勉強の続き。
  1. java.ioパッケージは入出力 ストリームを提供する。Character StreamとByte Streamがある。Character StreamではUnicodeが使える。Byte StreamはISO-Latin-1のみ。File, Pipe, Filter, Object Serializationなど。DataInputStreamなどが便利。
    RandomAccessFileクラスを用いるとランダムアクセスが可能。
    java.ioでは他にFile, FileDescripter, StreamTokenizer, FilenameFilterなどのクラスが使える。java.util.zipにはZipInputStream, ZipOutputStreamなど。
  2. プログラム起動時の初期設定などを扱うクラスにPropertiesがある。アプレットの場合はセキュリティ上の制約に注意。Applet Security FAQを参照。Propertiesの使用例としてBINGOの例題を参照。
    コマンドラインの引数もStringアレイのargsで扱える。C, C++とは違ってプログラム名は渡されない。Stringからの型変換はInteger.parseInt(args[0])など。
  3. シ ステムリソースへのアクセスにはSystemクラスやRuntimeオブジェクトを用いるとプログラムがポータブルになる。Systemクラスは instantiateする必要は無く、直接使える。標準入出力変数としてSystem.in, System.out, System.errがあり、print, println, writeメソッドが使える。システムの環境はSystem.getProperty(name)で得られる。Propertiesオブジェクトで System.setProperties(object)を使ってシステム環境をそのプログラムの実行中だけ再定義することもできる。
    Javaではオブジェクトを使用しなくなったらメモリ解放のため自動的にfinalizeされるが、明示的にfinalizeすることも可能。同様に明示的にGarbage Collectionをすることも可能。
    プ ログラムのセキュリティ向上のためにSecurity Managerを定義することができる。プログラム中で定義できるのは1回のみ。System.getSecurityManager()で利用可能。 checkExit(), checkAccess()などでプログラムの終了やオブジェクト、スレッドへのアクセスをチェックすることができる。
    その他、System.arraycopy(), System.currentTimeMillis()などが便利。System.exit(-1)はそのプログラムだけでなく、Java Runtime Environmentも終了させる。
    RumtimeオブジェクトはJava VM, Java Interpreter, Host OSのインスタンス。それぞれの実装によって仕様が異なる。
次はCreating a GUI with JFC/Swingを読むべし。

2005/11/01

IEで見えない不具合が解消

>不具合といえば、このサイトのトップページをWindowsの
>InternetExplorerで見ると空白になってしまうことが
>判明。個別の記事のページは見えるので、Templateを
>変えたせいではないと思うのだけど... ヘルプデスクに
>メールを出してみた。

と書いた件。IEで見えない原因が分かった。このブログのタイトルを「Star Atlas 開発日誌」と名付けたので、<TITLE>タグに日本語が入る。ところがデフォルトのテンプレート設定では

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><$BlogPageTitle$></title>

<$BlogMetaData$>

<style type="text/css">

となっていて、<TITLE>タグが<$BlogMetaData$>の手前に表示される。この<$BlogMetaData$>タグには

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

という文字コード指定のMETAタグがある。

IEはこのUTF-8指定のMETAタグの前に日本語のタイトルタグを解釈した結果、このサイトをShift-JISだと誤判定している。結果、ページが見えずに真っ白になる。

テンプレート指定を

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<$BlogMetaData$>

<title><$BlogPageTitle$></title>

<style type="text/css">

と並び替えたら解決した。