開発していて気づいたこと
Memo for Develop


Java(J2ME) on Zaurus篇

存在しないクラス

 次のクラスは存在しないことを確認しました:

(2008-03-11)

利用できないクラス

 次のクラスは存在しますが、J2SEの定義と異なりprivateコンストラクタしか存在しないため利用できないことを確認しました :

(2008-03-11)

利用できないメソッド

 次のメソッドは存在するようですが、IllegalAccessErrorが発生して利用できないことを確認しました :

(2008-08-28)

存在しないメソッド・フィールド

 次のメソッド・フィールドは存在しないことを確認しました :

 Java2 SE 1.4 API仕様によればdeprecatedとされているわけでもなくJava2 1.3に存在しないメソッド・フィールドというわけでもないようなのですが……。英文の資料をチェックすれば明記されているのかもしれませんが。
(2004-04-07, 2005-01-08, 2008-02-14, 2008-03-11)

java.awt.Listを複数選択から単一選択に戻すときの注意点

 java.awt.Listクラスの単一選択と複数選択の切り替えはsetMutipleメソッドで行いますが、複数選択で実際に項目が複数選択されている状態のときに同メソッドを呼びだして単一選択へと変更してもすぐには単一選択状態にはなりません。ユーザー操作によって項目選択がなしまたはひとつになったときにようやく単一選択状態となります。このような動作を避けるには同メソッド呼びだしによる単一選択への切り替え前に明示的にすべての選択を解除します。(2008-02-14)

画面サイズの取得方法

 ツールバーを除いた画面のサイズはjava.awt.Toolkit#getScreenSize()で取得できます。スタイル切り替えにも対応しているのでメインのフレーム作成時にこのサイズを設定すれば起動後の表示がQtopiaアプリケーションとほぼ同じになります。フレームの枠が残るので完全に同じにはなりませんが。(2004-04-07)

スタイル・アプリケーション切り替え時のサイズ調整を抑制するには

 SL-C860はスタイルやアプリケーションを切り替えるとそのとき対象となっているアプリケーションのフレームのサイズを画面いっぱいに表示するよう自動的に調整します。Javaアプリケーションでその調整の影響を受けないようにするにはjava.awt.Window#setResizable()メソッドを呼びだしてサイズを変更できなくします。ただしこうするとスタイルを切り替えたときにフレームの一部が画面からはみだすかもしれないので注意が必要です。(2004-04-07)

 java.awt.Window#setResizable()でサイズ変更を許可していてもかならず自動的に調整されるわけではないようです。(2004-08-28)

TexiFieldクラスのKeyTypedイベントでイベントをconsume()しても効果がない

 一般的にリスナーを登録して受け取ったイベントはその引数であるイベント情報(AWTEvent派生クラスのインスタンス)のconsume()メソッドを呼び出すことで以後処理を行わないようにすることができるということになっています。しかしSL-C860のJ2MEではTextFieldクラスでKeyTypedイベントのconsume()を呼び出しても処理は継続されてしまいます。そのため文字の入力抑止としてこの方法を用いることはできません。(2004-04-07)

FlowLayoutの配置にFlowLayout.TRAILINGを指定しても無視される

 レイアウトマネージャにFlowLayoutそ指定してコンポーネントの配置方法にFlowLayout.TRAILINGを指定しても効果がありません。おそらくFlowLayout.LEADINGも同じことと思います。API 仕様には1.2 API 変更の承認待ちのため、パッケージ専用と書かれていますが、この情報との関係は不明です。どうやら国際化アプリケーション用とのことのようなのですが……(2004-08-28)

FrameにWindowListenerを指定してもwindowClosingメソッドが呼びだされないことがある

 windowClosingメソッドだけを定義したjava.awt.WindowAdapter派生したクラスをjava.awt.FrameにWindowListenerとして設定すると表示されたウィンドウ(フレーム)を閉じてもwindowClosingメソッドは呼びだされません。しかしウィンドウの管理そのものはQt/Embeddedで行っているようでスクリーン上からは消えてなくなります。結果として幽霊のプロセスが残ります。
 windowClosingメソッドとwindowClosedメソッドの両方を定義すると両方とも呼びだされます。
 WebにあるJavaのawtのサンプルにはけっこうwindowClosingメソッドだけですませてしまっているものがあるので注意が必要です。(2005-01-08)


Borland C++Builder篇

イメージリストビットマップの色数はビルド環境のカラーパレット数

 イメージリストに設定したビットマップの色数は追加した直後を除いてビルド環境の画面のカラーパレット数となります。そのためHighColorやTrueColorでビルドした実行ファイルを256色環境で実行するとビットマップが表示されないことがあります。動作に支障はありませんがアイコンがひとつも描かれないツールバーというのはなかなか不気味なものがあります。(2000/05/20)

std::strtol()でstd::stringを変換したときの異常な動作

 標準Cライブラリ関数std::strtol()の第一引数にstd::stringのメソッドc_str()を指定すると長さが四バイトのとき第二引数に与えたポインタが終端文字を指しません。原因は不明ですが最適化に関係があるのではないかという気がします。回避するには面倒でもcharの配列にコピーするしかなさそうです。(2002/03/12)


エル・エス・アイ ジャパン(株) LSI C-86篇

mktime()は引数のtm構造体のtm_wdayメンバを更新しない

 C標準ライブラリ関数のmktim()はANSI規格では戻り値としてtime_tに変換した値を返すと同時に引数に指定したtm構造体の各メンバを正しい状態にすることと定められていますがLSI C-86 Ver.3.30cではすくなくともtm_wdayメンバは更新されません。そのため曜日計算はmktim()に頼らず独自に行う必要があります。(2001/07/07)


Produced by D.B.C.