🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

1回答

2452閲覧

javaからcmdを通じて外部プログラムを呼び出したい

leeev

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2019/12/27 00:16

編集2019/12/27 05:20

javaのプログラムからfortran言語で書かれ、コンパイル済みのexeファイル(S1.exe)を、cmdを通じて呼び出したいです。目的は、S1.exeによる手打ちの計算をループ文でやらせようとしていますが、初期段階で躓いています。

コンパイル済みのため、元はfortranのプログラムでもjavaからcmdを呼び出し、cmd上でS1.exeを呼び出せば行けるのではないかと思いましたが、うまくいきません。
一応、S1.exeまでのパスを環境変数に登録してあります。

以下のコードを実行すると、エラーは出ないのですが、画面に何も表示されません。何がいけないのでしょうか。

追記:fortranをコンパイルしたexeファイルは、batファイルを先に実行してからでないと、実行できないことを忘れていました。
batファイルをcmd上で実行するまでは成功したのですが、やはりS1.exeの実行で躓いてしまいます。

Call.java

1import java.io.IOException; 2 3 4public class Call { 5 6 public static void main(String[] args) { 7 String[] Command = { "cmd", "/k", "S1.exe"}; // /kはその後もcmd上で作業する必要があるため 8 Runtime runtime = Runtime.getRuntime(); 9 try { 10 runtime.exec(Command); 11 } catch (IOException e) { 12 e.printStackTrace(); 13 } 14 } 15 16}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらをお試しください。

java

1String[] Command = {"cmd", "/c", "start", "cmd", "/k", "notepad"};

あ、notepadの部分は、当然修正必要ですが。

投稿2019/12/27 01:47

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leeev

2019/12/27 04:35

回答ありがとうございます。 早速試してみましたが、cmdは立ち上がったのですが、肝心のS1.exeが実行されませんでした。 cmdの画面には、C:\Users:〇〇\Desktop\pleiades\workspace\Call> と表示されています。 S1.exeを上記の階層に移してみても、結果は同じでした。
leeev

2019/12/27 05:22 編集

失礼しました。 fortranのプログラムはbatファイルから実行する必要がありました。 そのため、String[] Command = {"cmd", "/c", "start", "cmd", "/k", "mingw-w64.bat"}; としたところ、batファイルの実行は成功しました。しかし、その後のS1.exeの実行ができない状況です。String[] Command = {"cmd", "/c", "start", "cmd", "/k", "mingw-w64.bat", "cmd", "/k", "S1.exe"};でやってみたのですが失敗でした。
momon-ga

2019/12/27 05:55

S1.exeをnotepadにしたら、うまく動くと思います。 つまり、Javaのプログラミングの問題では、ありません。 > 一応、S1.exeまでのパスを環境変数に登録してあります。 が、認識していないのでは?と想像しますので、そちらを確認してみては、どうでしょうか。 あと、mingw-w64.bat の引数は、本当にあっているようには見えません。 Java経由でなく、実行方法を試した方がよいかと思います。
momon-ga

2019/12/27 06:00

中身の知らないbatファイルについては誰も答えることはできません。 まずは、プログラムを経由せずに、コマンドプロンプトからS1.exeを実行する手順を確立してください。
leeev

2019/12/27 06:48

いつもやっていたS1.exeを動かす手順としましては、いつもbatファイルを普通に実行、するとcmdが立ち上がるのでそこからS1.exeを実行、という手順です。単なるcmdからでもbatファイルの中身を貼り付ければ実行できます。当たり前ですが、、、 batファイルの中身は、 echo off set PATH=C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH% "C:\WINDOWS\system32\cmd.exe" です。
momon-ga

2019/12/27 07:19 編集

パっと見、set PATHをしてるだけなら、プログラム外でパスを追加しておき、S1.exeを実行すれば良いのでは?batを間に挟ませたい理由ってあります? あとは、バッチファイルを引数使えるように修正するかですかねぇ。
leeev

2019/12/27 07:39

お手数おかけして申し訳ないです。 確かに仰るとおりなのですが、環境変数にC:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\binを登録して、S1.exeがあるフォルダ内でcmdを起動し、S1.exeを実行しようとすると、コンピューターにlibgcc_s_seh-1.dllがないためプログラムを開始できません。とエラーになるのです。 このlibgcc_s_seh-1.dllは上記のmingw64のbinの中にあります。 理由は分かりませんが、batファイル、もしくは、javaのプログラム内でset path=~~~、としないとs1.exeが実行できないのです。 改めてS1.exeが実行出来ない件なのですが、javaでcmdを呼び出し、batファイルもしくは記述でbinへのパスを通し、s1.exeを呼び出そうとするのですが、cmd上ではbinへのパスが通っているだけでs1.exeが実行されず、エラーも出ていない、カレントディレクトリのままという状態です。これは、呼び出し方の問題なのでしょうか。{"cmd","/k","S1.exe"};の呼び出し方では間違っていますか? 間違っていない場合は今回は諦めるしかなさそうです。。。
leeev

2019/12/27 07:48 編集

要求されたdllをすべてS1.exeのフォルダ内に移動させたらパスを通さなくてもS1を実行できました。 そして、s1.exeもjavaで実行できました。 なんだか肩透かしを食らった気分です。 おかげで解決できました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問