ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

JBuilderコミュのJBuilder2006でGUI設計画面が落ちる

  • mixiチェック
  • このエントリーをはてなブックマークに追加
みなさんこんにちは。

JBuilder2006DeveloperにてFrameのGUI設計を表示しようとするとJBuilder自体が落ちてしまいます。

昨日まで問題なく動いていたのですが今日になって急に落ちるようになりました。

以前作成したプロジェクトでも同じような現象がありましたが、
そのときはGUI設計画面は表示され、配置等を変えると落ちるという症状だったため何とかやりすごした経緯があります。

以前はJBuilder9を使用していましたがこのような問題はありませんでした。

どうも、メニューの[ファイル]→[新規]→[アプリケーション]で作成したFrameでのみ落ちているようです。
[ファイル]→[新規]→[フレーム]で作成したFrameは問題なく表示されます。

ただし、[ファイル]→[新規]→[フレーム]で作成したFrameに[ファイル]→[新規]→[アプリケーション]で作成したFrameのソースコードをコピペしてコンパイルを通るようにしても、落ちます。

このFrameには自前で作成したInterfaceをimplementsしているのですがそれが原因なのかもしれません。
(ただし、Interfaceをはずしても現象は再現しました。)

落ちた後立ち上げ直すとそれまでのソースの変更箇所は反映されています。
コンパイルは通り、実行すると作成したFrameは問題なく表示されます。

画面上はGridBagLayoutでボタンが数個配置してあるのみです。
GUIの設計ができないとJBuilderの意味がなく非常に困っております。


何か些細な情報でもかまいませんので回避策などご存じの方見えないでしょうか?

OSはTurboLinux10 Desktop
JavaはJBuilder2006に標準で入っているjava version 1.5.0_03-b07です。

どうかよろしくお願いします。

コメント(8)

現在までにわかったことをご連絡しておきます。

どうも、Frame内のデフォルトコンストラクタに何か処理を書くとおかしくなるようです。

public FrameMain(){
try{
***インスタンスの生成などを行なう処理が書かれている***
jbInit();
}
catch(Exception ex){
ex.printStackTrace();
}
}

自動生成されるコンストラクタは上記のものですが、
その中で自分で作成したクラスの生成などを行なっていました。(******の部分)
別のFrameではデフォルトコンストラクタはさわらず、
引数付きのコンストラクタを作成しています。
そこで、デフォルトコンストラクタを以下のように直しました。

public FrameMain(){
try{
jbInit();
}
catch(Exception ex){
ex.printStackTrace();
}
try{
***インスタンスの生成などを行なう処理が書かれている***
}
catch(Exception ex){
ex.printStackTrace();
}
}

こうしたところGUI設計画面が1度だけ立ち上がるようになりました。
別の画面を開いて、再度GUI設計画面を開こうとすると同じようにJBuilderが落ちてしまいます。

しつこいようですが、コンパイルは通り無事に立ち上がるのでソースコードに問題はないと思います・・・。

引き続き色々調べてわかりましたらまたご連絡します。
JBuilderメーリングリストや、newsgroups.borland.co.jp など、またはサポートにて尋ねられてはいかがでしょうか?

また問題を再現させる最小限の手順やソースコード一式があると助かりますです。
kenさん、ありがとうございます。

一度サポートにメールを送ったのですが無しのつぶてです・・・。
メーリングリストに投稿してみようと思います。
>一度サポートにメールを送ったのですが無しのつぶてです・・・。

なんと!!
ひでっぷさん
「サポート」とは「テクニカルサポート」でしょうか? インフォメーションセンターなどに報告のみを行われたのでしょうか?

また、<JBuilder_Dir>\bin\JBuilderw.exe ではなく、<JBuilder_Dir>\bin\JBuilder.exe のほうの.exeをコンソールで起動してみてください。落ちる際にコンソールに何か出力されているのではないでしょうか?
kenさん、たびたびありがとうございます。
kenさんの言われたとおりコンソールで起動したところ原因が判明しました!

今回のプログラムはswingアプリケーションなのですが、2重起動を防止するためのクラスを自前で作成しております。
やっていることは下記のようにTCP/IPのある特定ポートのサーバーソケットを作成し、接続受け入れ状態にするだけです。

ServerSocket socket = new ServerSocket(特定ポート番号);
Socket insocket = socket.accept();

2重起動しようとするとTCP/IPの特定ポートが空いていないため2重起動とみなしSystem.exit(0);で強制終了しているのです。

この2重起動防止クラスがFrameのコンストラクタで走らせています。
どうもこれが悪さをしていたようです。
コンソールに

===================================================
java.net.BindException: Address already in use
〜省略〜
*** シャットダウン要求を受け取りました ***
開いているすべてのファイルを保存します...
保存が完了しました
===================================================

とでていて気づきました。
2重起動防止クラスの生成をメイン関数内に移動したところJBuidlerが落ちなくなりました。

JBuilder2006からは画面設計時にコンストラクタが走るようですね。
JBuilder9の時はjbInit()だけを参照していたのか問題なかったものですから気づきませんでした。

kenさんのアドバイスがなければずっとわからないままでした。
本当に助かりました。ありがとうございました!



追記)
サポートへはだいぶ前にメールを送信しましたが、その後OSの再インストールをしたためどちらに送ったかわかりませんでした。
あー良かった〜。(^^)
これからもJBuilderをよろしくお願いいたします。
ご存知かも知れませんが、一応補足です。

もし、自作コンポーネントの中の挙動を
・JBuilder等のIDE内でのデザイン時
・本当の実行時
とで変更するのであれば
java.beans.Beansクラスの
public static boolean isDesignTime()
というメソッドを使用して、今デザインモードかどうかを判定できると思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

JBuilder 更新情報

JBuilderのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。