jFD開発したりしなかったり日誌
2008-02-10 [長年日記]
_ 帰省
ちょっと用事があって実家へ帰省。
昼過ぎに自宅を出て、鈍行を乗り継いで八王子まで行き、あずさにのって帰宅。
実家には19時半くらいに到着。
途中電話があり、色々大変なことになったがそれは諸事情で割愛。
_ jFD2
ずっと実装をほったらかしていたツリーがやっと出来上がった。
インターフェイスデザインはWinFDのツリーを参考にしつつ、ツリーそのものはWinFDと違って
Explorerの左側のツリーのようにリアルタイムで生成され、ノードを閉じたり開いたりできる。
また、WinFDと違い、ドライブごとにツリーが別れてなくて、全ドライブの親になる
ルートフォルダが存在する。
アーカイブの中もツリーで開けていい感じ。
さらにFTPにもアクセス可能だ。
実を言うとかなり苦戦した。
最初は簡単だと思ってたんだが、やってみると考慮しないといけないことがやたらと多い。
「そんなもん、各ノードが開かれるときにノードに対応したディレクトリのファイル一覧取って、
子ノードとして返すだけでしょ」
と思ってたんだが、まじめにレスポンスを考慮して作るとこんな制限が入る。
1、ディレクトリのファイル取得はイベントディスパッチスレッドで行ってはならない
2、初期状態で選択されているディレクトリを指定する際、その親以上のディレクトリの
ファイル取得もイベントディスパッチスレッドで行ってはならない
3、同時に複数のディレクトリのファイル一覧取得を行ってはならない
1はファイラーみたいなソフトを作るなら基本中の基本だ。
時間のかかる処理をイベントディスパッチスレッドで行うと、その間はUIがフリーズするので
ユーザーに不安感を持たせ、必要以上に処理時間を長く感じさせてしまう。
特にjFD2はリモートのファイルシステムを扱うので、ファイル一覧取得はイベントディスパッチスレッドとは
別のスレッドで行わないといけない。
2も同様で、ルートから目的のディレクトリまでの途中のディレクトリのファイル一覧を
全部取得するまでUIが固まったまんまじゃユーザーに不快感を持たれる。
それにからんだのが3で、例えば
ftp://abc/d/e/f/g/
というノードを選択した場合
ftp://abc/
ftp://abc/d/
ftp://abc/d/e/
ftp://abc/d/e/f/
ftp://abc/d/e/f/g/
の5つのディレクトリのファイル一覧を取得する必要があるのだが、これを一度にやろうとすると、
FTPサーバーに「接続多すぎだコラ」と怒られる可能性がある。
だから、ファイル一覧取得専用のスレッドを用意して、ファイル一覧取得はそれに任せないといけない。
要するに、凄くめんどくさかった。
試行錯誤を繰り返してやっと納得できる挙動に出来た。
ただ、Macだとカーソルの左を押しても親ノードに移動してくれないのが大不満。
ここら辺のLook and Feelの挙動の危害は何とかしてほしい。
- キーワード不明 ×8 / java イベントディスパッチスレッド フリーズ ×2 / イベントディスパッチスレッド フリーズ ×1 / AIR リモート ファイル取得 ×1 / ファイラ "ドライブごと" ツリー ×1 / jfd ftp ×1 / イベントディスパッチスレッド ×1