質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

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

Q&A

解決済

2回答

2728閲覧

java mainクラスの動かし方と変数への値代入方法について

h_proc

総合スコア68

Java

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

0グッド

0クリップ

投稿2021/10/15 01:33

Main.javaファイルを作成し、メインクラスを以下のように記述しました。

Main.java

1import java.io.*; 2import java.nio.file.*; 3import java.nio.*; 4import java.util.*; 5 6public class Main 7{ 8 public static void main(String[] args) 9 { 10 try{ 11 String in = args[0]; 12 String out = args[1]; 13 double f = Double.parseDouble(args[2]); 14 double alp = Double.parseDouble(args[3]); 15 Mesh m = STLReader.readMesh(in); 16 EdgePair.alpha = alp; 17 Mesh newM = Simplifier.simplifyMesh(m, f); 18 STLReader.writeMesh(newM, out); 19 }catch(Exception e){e.printStackTrace();} 20 } 21}

このファイルをVSCodeにて実行をしたところ、

java.lang.ArrayIndexOutOfBoundsException

というエラーが表示されます。原因は11行目以降の
args[0]~args[3]に値が入っていないことまでは調べて分かりました。
質問させていただきたいことは以下の2点です。

【1点目】
args[]に値を入れるにはどうしたらよいのでしょうか?

試しに、VSCodeのターミナルで

java

1java Main ファイルのパス

と入力しましたが、

エラー: メイン・クラスMainを検出およびロードできませんでした

というエラーが表示されてしまいました。

【2点目】
VScodeでの実行は、
上のタスクバーにある実行(F5キー)で行って問題はないでしょうか?
ターミナルなどを使ったほうがよいのでしょうか?

(補足)
VScodeでの環境開発は
このサイト
を参考に行っています。

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

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

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

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

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

BeatStar

2021/10/15 02:12

まず一つ目。Main.javaはコンパイルされていますか?Main.classが出ていますか? 二つ目。VSCodeのターミナルでのパスはどうなっていますか? カレントディレクトリにないclassファイルを指定した場合も同様の例外になりますし。 三つ目。本当にコンパイル後は本当にclassファイルですか? jarファイルとして使おうとするなら、 java -jar Main.jar だったかな。 jarファイルであることを指定しないといけないし。
dodox86

2021/10/15 02:12

Visual Studio Codeの使い方とコマンドライン引数の設定の仕方、どちらを聞きたいのかわかりづらいご質問になっています。(おそらくどちらもなのでしょうけど)
jimbe

2021/10/15 03:53 編集

ご質問のタグに VScode とかも付けられれば、 VScode に詳しい方の目に留まり易いかもしれませんね。
guest

回答2

0

ベストアンサー

【1点目】
args[]に値を入れるにはどうしたらよいのでしょうか?

[1] 手動でコンパイル実行
手っ取り早いのは、ターミナルからMain.javaファイルがあるディレクトリに移動して手動でコンパイル、引数を指定して実行。

[2] launch.jsonで指定
1.javaファイルがあるフォルダを[ファイル]-[フォルダを開く]で開く。
2.[実行]メニュー - [構成の追加]
※1.で開いたフォルダに.vscodeフォルダが作られ、その中にlaunch.jsonが作成されます
3.launch.jsonが開かれていると思うので、[構成の追加]ボタンをクリック 選択肢から
{} Java: Launch Program With Arguments Promptを選択
構成の追加ボタンクリック後の画面
launch.jsonが以下のようになっているのを確認して、launch.jsonを保存

json

1{ 2 // IntelliSense を使用して利用可能な属性を学べます。 3 // 既存の属性の説明をホバーして表示します。 4 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 { 8 "type": "java", 9 "name": "Launch with Arguments Prompt", 10 "request": "launch", 11 "mainClass": "", 12 "args": "${command:SpecifyProgramArgs}" 13 }, 14 { 15 "type": "java", 16 "name": "Launch Current File", 17 "request": "launch", 18 "mainClass": "${file}" 19 }, 20 { 21 "type": "java", 22 "name": "Launch Main", 23 "request": "launch", 24 "mainClass": "Main", 25 "projectName": "364470_488bff68" 26 }, 27 ] 28}

4.エディタウィンドウをMain.javaに変更(Main.javaがエディタタブになければ開いて)、[実行とデバッグ]タブを開き、プルダウンから「Launch with Arguments Prompt」を選択
イメージ説明
6.緑の△ボタンをクリックするか、F5で実行すると、引数を入力するプロンプトが開くので引数を入力
7.引数が渡された状態で実行されると思います。

[3] 引数を毎回指定せず固定で実行したい場合
1.[実行]メニュー - [構成の追加]
{} Java: Launch Program in Current Fileを選択
2.nameがLaunch Current Fileなっている構成が追加されます。
3.nameは適当に変更。ここでは「Launch Current File with Argument」に変更しています。
4.下図のようにargsキーを追加し引数を指定
※追加したargsの前の行("mainClass")末尾に「,」追加するのを忘れないように

json

1{ 2 // IntelliSense を使用して利用可能な属性を学べます。 3 // 既存の属性の説明をホバーして表示します。 4 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 8 //ここから追加された箇所 9 { 10 "type": "java", 11 "name": "Launch Current File with Argument", 12 "request": "launch", 13 "mainClass": "${file}", 14 "args": ["11","22","33","44"] 15 }, 16 //ここまで追加された箇所 17 { 18 "type": "java", 19 "name": "Launch with Arguments Prompt", 20 "request": "launch", 21 //省略 22 ] 23}

5.Main.javaをエディタタブで選択し、実行とデバッグのプルダウンから3.で変更したnameの構成(Launch Current File with Argument)を選択して実行


※「VSCode launch.json java」などで検索すれば、実行に関して凝ったことができるかと思います。必要に応じて調べてみてください。


【2点目】
VScodeでの実行は、
上のタスクバーにある実行(F5キー)で行って問題はないでしょうか?

何を以って問題とするかわかりませんが、小さなパッケージや単体プログラムを実行するぶんにはプログラムの動作確認に支障はないかと思います。

Mavenなどを使ったJavaプロジェクトを実行する場合については私は判りかねます。


【補足】ターミナルから引き数を指定して実行した際エラーになった件について
F5で実行すると、Windowsであれば例えば以下のような場所にclassファイルが作成されます。
C:\Users\username\AppData\Roaming\Code\User\workspaceStorage\1db5eed5661612a3c260c45b06aa8514\redhat.java\jdt_ws\364470_488bff68\bin\Main.class

\workspaceStorage\以降のパスは恐らくランダムに生成され、VSCodeのウィンドウ単位だったり、フォルダ単位だったりです。
恐らくVSCodeのバージョンアップでパスの構成が変わっていますが、別質問で回答した内容が参考になるかと思います。
https://teratail.com/questions/343055#reply-471567

ターミナルから実行してエラーになったのはカレントディレクトリにクラスファイルがない、classファイルがある場所にclasspathが通ってないためです。

その為以下のようにclasspathを指定すれば、引数を渡して実行できます。ただ現実的な運用ではないですね。

java -classpath C:\Users\username\AppData\Roaming\Code\User\workspaceStorage\1db5eed5661612a3c260c45b06aa8514\redhat.java\jdt_ws\364470_488bff68\bin\ Main 1 2 3 4

投稿2021/10/15 06:02

編集2021/10/15 06:06
Crimson_Tide

総合スコア509

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

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

h_proc

2021/10/16 12:50

[3]の方法でようやく動きました。ありがとうございます。
guest

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

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

Zuishin

2021/10/15 01:49

書いてないですね。 読みましたか?
h_proc

2021/10/15 02:03

ありがとうございます。 このサイトでは args[0],args[1]がそれぞれsamurai,engineer となって出力されていますが、このsamuraiとengineerはどこで記述しているのでしょうか...?
dodox86

2021/10/15 02:09

@y_waiwaiさん この質問はJavaのmainメソッドのコマンドライン引数の扱い方というよりも、Visual Studio Codeでのそれの設定の仕方を問うものだと思います。質問の仕方に少々不備があるかもしれない、ということはあるかもしれませんが。(まぁそれは置いておいても、なぜそのサイトの記事を、というかんじはします)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問