↑を書いて気がついたこと
通常、Javaアプリケーションを書くのに、既存の JavaVM 上で動作する他のクラスから、main() メソッドを呼び出されて起動するなんてことは想定しないだろう。
ここに大きな問題が隠れていることに気がついた。Java による GUI アプリケーションの多くは、Swing の Sinle Thread Rule*1 なんて気にしないで作られている。main() メソッドを呼び出された側からすると、既に EventDispatchThread が動作しているなんて予想もしない。
public static void main(String args[]) { JFrame f = new JFrame(); // コンポーネントの追加 f.show(); }
なんてやると、いきなり GUI がデッドロックしてしまう可能性がある。
*1:詳しくは JAVA PRESS Vol.35 のワタシの記事を見てください(と、さりげなく宣伝)