• 締切済み

Javaでの質問です。

Javaでの質問です。 現在、JavaでWindowアプリを作成中、SWTのボタンを押すと他のアプリケーションが立ち上がるように作りたいと考えています。 そこで、java.lang.ProcessBuilderクラスを利用して起動したいと考えていたのですが、なぜか動きません。 いろいろ原因を調べているのですが原因が追求できずに困っています。 詳しい方がいれば教えていただけないでしょうか。 【現状】 本体のプログラムはスレッドを用いたプログラムになっている。 ボタンを押して起動するプログラムはスレッドプログラムである。 ボタンを押しても外部プログラムは起動しないが、本体プログラムを終了すると起動してほしい外部プログラムが起動する。 windowsの計算機やメモ帳、paintなどは起動するし、wordやオープンオフィスなんかで実験すると問題なく起動する。 これが現状です。 何か特別な処理を入れなければいけないのか、よくわかっていません。 お手数をおかけします。 何卒、宜しくお願いします。

  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.3

moonfieldさんの補足見てサンプル改作ってみました。(今はコードを載せられない環境にいるので割愛) 大体同じ動きでした。 謎ですね。。。 ・メモ帳はOK ・swingアプリはNG  swtアプリ落としてもswingが上がらなかったのが違うところ  何かミスったか? 追加で確認したこと。 ・Runtime.execも同じ動き ・…swt.program.Programは使えなさそう ・バッチ経由ならProcessBuilderでもイケた  (つまりProcessBuilderはバッチ実行、バッチはjavaコマンドでswingアプリ起動、ならOK)

moonfield
質問者

お礼

crossgate様 ご回答ありがとうございます。 やっぱり動きませんか。 私の場合はバッチで処理した場合もswingを動かしたときと同じ動きになってしまってます。 しかし、これでProcessBuilderで起動するだけではいけないことがわかりました。 さらになにかをプラスするか、もしくはまったく別の方法を探してみます。 ありがとうございます。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.2

スレッド上でProcessBuilderする。 生成するプロセスはjavaのウィンドウアプリらしい。 というキーワードでサンプル作ってみました。 普通に動きますね。 --------------------------------------- import javax.swing.JFrame; import javax.swing.JLabel; public class HelloWorld extends Thread{   private static boolean call = false;   public void run() {     JFrame frame = new JFrame();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.getContentPane().add(new JLabel("Hello world"));     frame.setLocationRelativeTo(null);     frame.pack();     frame.setVisible(true);     if (call) {       try {         ProcessBuilder builder = new ProcessBuilder("java", "HelloWorld");         Process process = builder.start();         int ret = process.waitFor();         } catch(Throwable e) {          e.printStackTrace();       }     }   }   public static void main(final String[] args) {     if (args.length == 1) {      call = true;     }     HelloWorld thread = new HelloWorld();     thread.start();   } }

moonfield
質問者

補足

ご回答ありがとうございます。 説明不足で申し訳ありません。 >スレッド上でProcessBuilderする。 >生成するプロセスはjavaのウィンドウアプリらしい。 すいません。微妙に違います。 本体アプリもサブアプリもthreadアプリであること。それが起動に影響しているのではないかと考えているのです。そのために乗せ情報でした。 本体はswtのウィジェットを利用したthreadプログラミングです。その中にボタンがあり、ボタンを押すとSwingで書かれたアプリが立ち上がる予定です。 swingで書かれたサブアプリでもthreadを利用しています。 実験として、swingの何でもないロジックにボタンをつけてactionLisnerから起動してもやはり元アプリを終了させないとサブアプリは立ち上がりませんでした。 すいません。めんどくさい説明ですね。 以上です。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

「外部プログラム」と呼ばれるものが、CUI(バッチなど)で  ・入力待ちになっていないか?  ・標準出力に何か出力するんだけど、Javaでそれを拾ってあげているか? ぐらいかな。。。? WindowsのGUIツールやOfficeは動くけど「外部プログラム」はダメって言われても。 具体的に「外部プログラム」は何ですか? それを書かないとレスが付かない気が。。。

moonfield
質問者

補足

ご回答ありがとうございます。 >具体的に「外部プログラム」は何ですか? ウィンドウアプリケーションです。 javaを利用して自作したプログラムです。 現在、ウィンドウ自体が立ち上がらず、呼び出し元が終了すると同時に起動します。 以上です。

関連するQ&A

  • ProcessBuilderを使用して、対話型の外部プログラムとやり取りするには?

    環境はWindowsXPです。 対話型の外部プログラム、例えば、sqlite3やcygwinのシェルなどを ProcessBuilderを使って対話的にやり取りする方法はありますか? 普通に ProcessBuilder pb = new ProcessBuilder("cmd", "/C", "sqlite3.exe"); としても固まってしまいます。 作りたいもののイメージとしては、eclipseのProcessConsoleのようなものです。 これをeclipseを使わずにSWTのみで作りたいと考えています。

    • ベストアンサー
    • Java
  • Java起動・・・?

    学校でJavaの勉強をしています。 そこで家でもやってみようと思い学校と同じやり方をしたのですが起動?しません。 コマンドプロンプトで実行しているのですが、 Exception in thread "main" java.lang.NoClassDefFoundErrorと出ます。 どのようにすれば出来るようになりますか?

    • ベストアンサー
    • Java
  • Javaプログラミングが実行できない

    javaの勉強を始めようと考え勉強しているのですが、いきなりつまずいて困っています。 コンパイラし、dirを打ったあとプログラムを実行すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample01 と表示され実行できません。 アドバイスお願いします。

    • ベストアンサー
    • Java
  • UTF-8 TeraTermPro で javaをするにはどうしたらよいのでしょうか

    javaをつい先日からはじめた超初心者です。(javaに関しては) そこで、プログラムがのっている参考書片手にそのまま写して実行させたのですがエラー??で何もできません。 友人に聞いても、そのまま実行すればできる。しか言いません。 授業でもいづれ必要になってくるのでこのままにしておくわけにはいかないのです・・・ 一応、こんな風になりました↓ import java.awt.*; import java.applet.*; public class WebApplet extends Applet{ public void paint(Graphics g){ String myString; myString="簡単なアプレット"; g.drawString(myString,50,50); } } <HTML> <HEAD>実験</HEAD> <BODY> <APPLET CODE ="WebApplet.class"width="190"height="90"> </APPLET> </BODY> </HTML> で、appletviewer WebApplet.HTMLと実行すると Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using・・・・・・・ と実行できないのです。 どなたか、教えてください。 個人で調べてみたのですが、さっぱりわかりません!! よろしくお願いします!!

    • ベストアンサー
    • Java
  • Javaの実行できません、教えてください。

    Javaの実行できません、教えてください。 http://members2.jcom.home.ne.jp/take_1118/Applet39.html このページのサンプルプログラムを実行したいですが、どうしても Exception in thread "main" java.lang.NoSuchMethodError:main というエラーが出るため、実行できません。 どうすればできるんでしょうか?教えてください、お願いします。 サンプルプログラムではmainメソッドが含まれていないようですが、そうすれば実行できるんでしょうか?

  • [JAVA]ProcessBuilderで「java -version」を実行できない

    以下のプログラムで「java -version」を実行しようとするとエラーになります。「java」だけですと実行できますが「-version」をつけるとエラーになります。 ---プログラムの内容--- import java.io.*; public class test4518 { public static void main(String[] args) throws Throwable{ ProcessBuilder pb = new ProcessBuilder(new String[]{"java -version"}); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } ーーーエラーの内容ーーー Exception in thread "main" java.io.IOException: CreateProcess: "java -version" error=2 at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) at java.lang.ProcessBuilder.start(Unknown Source) at test4518.main(test4518.java:5)

    • ベストアンサー
    • Java
  • Javaが実行されません。

    javacコマンドは正常に動くのですが、javaコマンドを使用すると Exception in thread "main"java.lang.NoclassDefFoundError:Sample2 と表示されるんですよ。 原因を教えてください。

  • javaに詳しい方に質問です

    javaに詳しい方に質問です 私は家ではwindowXP、学校ではUNIXを使ってjavaを勉強中です あるブロック崩しのプログラムがあるのですが、家では実行出来たのですが、 学校ではよくわからないエラーが出てしまいました 内容は下記の通り [c]$ cd java [c java]$ javac Blockdx.java [c java]$ appletviewer Blockdx.html Warning: Cannot convert string "-misc-kochi mincho-medium-r-normal--*-140-*-*-c-*-jisx0208.1983-0" to type FontStruct java.lang.UnsupportedClassVersionError: Blockdx (Unsupported major.minor version 50.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:539) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:157) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:123) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:561) at sun.applet.AppletPanel.createApplet(AppletPanel.java:619) at sun.applet.AppletPanel.runLoader(AppletPanel.java:548) at sun.applet.AppletPanel.run(AppletPanel.java:299) at java.lang.Thread.run(Thread.java:534) javaのバージョンは下記の通り 自宅 1.4.2_05 学校 1.6.0_18 学校でも家でもBlockdx.javaとBlockdx.htmlの二つのファイルを用意して Blockdx.javaをコンパイルした後、appletviewer Blockdx.htmlで実行したのは同じです 学校の先生いわく、バージョンかなぁと言っていましたが、よくわからないのが本音だそうです わかる方いらっしゃいますか?

    • ベストアンサー
    • Java
  • java 実行エラーについて

    プログラムを実行すると、 Exception in thread "main"java.lang.NoClassDefFoundError:Sample と出ます。理由がわかる人はぜひ教えてください。 一応プログラムを載せておきます。 < Sample.java > public class Sample{ public static void main(String[] argc){ System.out.println("Hello World!"); } } お願いします。

    • ベストアンサー
    • Java
  • Javaアプリケーションについて

    次のようなプログラムを作ってコンパイルをしました。 public class app { public static void main(String[] args) { System.out.println("Hello from Java!"); } } コンパイルまではできるのですが、 java appで実行しようとすると Exception in thread "main" java.lang.NoClassDefFoundError:app となって、アプリケーションを実行することができません。 本には、これで実行できると書いてあるのですが・・・ どなたか教えてください。

    • ベストアンサー
    • Java