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

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

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

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

12995閲覧

[java]コンパイルは通っているのに、classファイルが生成されません

newyee

総合スコア213

Java

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2018/05/14 09:59

編集2018/05/14 11:42

コマンドプロンプトにて、以下の3つのファイルをコンパイルした所エラーは出なかったのですが、何故かクラスファイルが生成されません...
以下は、Zenhan.javaです。

package comment; public class Zenhan{ public static void dowarusa(){ System.out.println("きなこでござる。くえませんがの。 "); } public static void doTogame(){ System.out.println("このおいぼれの目はごまかせませんぞ。 "); } }

以下は、Kohan.javaです。

java

1package comment; 2 3public class Kohan { 4 5 public static void callDeae(){ 6 7 System.out.println("えぇい、こしゃくな。 くせものだ!であえい!"); 8 9 10 } 11 12 public static void showMondokoro() throws Exception { 13 14 System.out.println("飛車さん、角さん、もういいでしょう。 "); 15 System.out.println("この紋所が目に入らぬか!"); 16 17 zenhan.doTogame(); 18 19 } 20}

以下はMidlle.javaです

java

1import comment.Zenhan; 2 3public class Midlle { 4 5 public static void main(String[] args) throws Exception{ 6 7 Zenhan.dowarusa(); 8 Zenhan.doTogame(); 9 comment.Kohan.callDeae(); 10 comment.Kohan.showMondokoro(); 11 12 13 } 14 15} 16 17

コマンドプロンプトでは、以下のように3つのファイルをコンパイルいたしました。
javac -encoding utf-8 Kohan.java -encoding utf-8 Zenhan.java -encoding utf-8 Midlle.java
一度目にコンパイルした際は、Zenhan.javaだけにclassファイルが生成され、他のファイルは生成されませんでした。
3つ同時ではなく、ひとつずつやってみたのですが、やはりZenhan.javaだけにclassファイルが生成され、他二つには、classファイルは作成されませんでした...

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/05/14 11:21

Kohan と Midlle はコンパイルエラーになりそうですが本当ですか?
newyee

2018/05/14 11:45

ご指摘ありがとうございます。一部修正いたしました。コンパイルエラーなのですが、Midlle.javaを単体で実行した場合のみ、エラーになり、Kohan.javaに関しましては、コンパイルエラーはでていません。
guest

回答1

0

ベストアンサー

普通このようなソースとクラスファイルは次のようにコンパイルするのが典型的と思います。

. + src + Middle.java + comment + Zenhan.java + Kohan.java + out

.のディレクトリーで次のコマンドでコンパイル

javac -encoding utf-8 -d out -sourcepath src src/*.java src/comment/*.java

さすればクラスファイルは次のように生成されます。

. + src + Middle.java + comment + Zenhan.java + Kohan.java + out + Middle.class + comment + Zenhan.class + Kohan.class

そして実行する際には.のディレクトリーで

java -cp out Middle

とやると期待通りに動きます。
これ以外の方法でもコンパイルする手段があるかも知れませんが、いずれにせよクラスファイルはパッケージ階層に対応したディレクトリーに置かれてないと実行時にロードできません。クラスローダーがパッケージの場所を探そうとして「あれれ・・・ないぞ?」となるからです。

なぜできないかを悩むよりは「どうコンパイルするのがよいのか」を知る(※)方が有意義な気がします。

※:実は3つのファイルを全部同じディレクトリーにおいて
javac -encoding utf-8 -d out *.java
とやってもoutに上記と同様のクラスファイルが生成できました。自分にはなぜそのようなコンパイルが許されるのかわかりませんが、できるからといって「異なるパッケージにあるソースを同一ディレクトリーに置く」のは病的に見えるのでしないほうがよいと思いました。

投稿2018/05/14 11:32

KSwordOfHaste

総合スコア18394

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

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

newyee

2018/05/14 12:17

ご丁寧なご回答ありがとうございます。 javaを勉強中でありまして、基本的にことが分かっておらず申し訳ないです... まず、同ディレクトリに3つのファイルを置いていた理由なのですが、コンパイルの際にコマンドプロンプトへのファイルパスの指定が分からなかったため、一度同ディレクトリへ置いておいた、3つのファイルをコンパイルしてから、Zenhan.javaと、Kouhan.javaをcommentフォルダへ移動してから、メインメッソドの記述がある、Midlle.javaを実行しようと考えていました。 本当に勉強不足で申し訳ないのですが、ご回答下さった部分でお聞きしたい点がございます。 コンパイルする際のコマンドの部分なのですが、「javac -encoding utf-8 -d out -sourcepath src src/*.java src/comment/*.java」 上記のコマンドの、「- d 」という部分から、先の意味が分かりません。 「- d」や「out」「-sourcepath src src/*」の部分について少しご解説願えますでしょうか...?
KSwordOfHaste

2018/05/14 12:46

回答につけておけばよかったですね。まずjavacコマンドの使い方を学びましょう。そこで不明な点があったらそれを整理してから尋ねてみてください。 古い(Java8)ですが日本語です。 https://docs.oracle.com/javase/jp/8/ Java SEツール・リファレンス(UNIX)or(Windows)から辿ればjavacのマニュアルにたどり着きます。 最新(Java10)英語 https://docs.oracle.com/javase/10/ そのほか「javac使い方」で検索すると色々なページがありますが一番正確な仕様はOracleが出している一次情報源のところです。
newyee

2018/05/14 15:27

ありがとうございます。 参考にさせて頂きます。 もし、またお聞きしたいことが出て来てしまった際に、ご回答頂けるようでしたら、よろしくお願いいたします。
newyee

2018/05/15 09:12

何度も申し訳ないです... 教えて頂いた、コマンドより、以下のようにコンパイルしたのですが、「Midlle.java」のみclassファイルが作成されません... 「javac -encoding utf-8 -d out -sourcepath C:\Users\Shinya\Desktop\java\5/Midlle.java C:\Users\Shinya\Desktop\java\5/comment/*.java」 「Zenhan.java」および「Kohan.java」はoutフォルダのcommentフォルダにてclassファイルが作成されておりました。 それともう一点お聞きしたい点がございまして、「5」フォルダの中にoutフォルダは作成したのですが、commentフォルダは作成していませんでした。自動で作成されていたのは、javacコマンドの仕様のようなものなのでしょうか...?
KSwordOfHaste

2018/05/15 09:36

-sourcepathは「コンパイルするソースファイルはどのディレクトリーをパッケージの起点にするか」を指定するオプションです。そのオプションの後ろにはディレクトリーを指定すべきですね。 -sourcepath C:\Users\Shinya\Desktop\java\5/Midlle.java と指定しておられますが、C:\Users\Shinya\Desktop\java\5/Midlle.javaはディレクトリーではないですよね? > 自動で作成されていたのは、javacコマンドの仕様のようなものなのでしょうか...? そういうことになるでしょう。
newyee

2018/05/16 02:23

何度もご丁寧にありがとうございます。 コンパイルに成功し、Midlle.javaのクラスファイルを作成することができました。 しかしながら....「java -cp out Midlle 」として実行しますと、文字化けのような現象が起きてしまいます。何度も申し訳ないので、ご面倒なようであればお答え頂かなくとも大丈夫なのですが、僕自身ここまで来たら、実行を成功させたいなと強く思っておりまして... 実行後の画面には、以下のような文字が表示されております。 ȂłB܂????́B ̂ڂ̖ڂ͂܂܂????B AႭȁB@̂IłI ソースコードはUTF-8での記述のため、コンパイルする際は、「-encoding utf-8 」としているのですが、何故このようになるのかが分かりません... もし、ご面倒でないようでしたら、ご返信頂けましたら幸いです。 よろしくお願いいたします。
KSwordOfHaste

2018/05/16 02:30 編集

質問は基本的に一問一答です。本サイトはサポートサイトではないので、一つの質問で、質問者さんが目的とすることが達成できるまでずっと対話を続けるような場ではないのです。 新たな疑問が起きたら新たな質問を挙げましょう。その方が個々の質問が「何に関するものなのか」ぶれずに済み、それがQ&Aを「ノウハウ共有目的で閲覧している方」にとって望ましいことなのです。
newyee

2018/05/16 07:00

分かりました。 ご指摘頂きありがとうございます。 お答え頂いた通りにしていきたいと思います。
newyee

2018/05/16 09:45

新たに質問をしようと思って、コードを確認して一からコンパイルして実行しましたら、何故か文字化けが解消され、正常に実行することができました。 理由は分からないのですが、一度PCの再起動をかけた後だったのですが、何かリセットされてうまくいったのかもしれません... なにはともあれ、正常に実行できてよかったです。 ご丁寧に色々教えてくださり、本当にありがとうございました。
KSwordOfHaste

2018/05/16 10:03

とりあえずコンパイルにしろ実行にしろ「何をやったか」の操作手順が後から明らかにできないとどうしようもないので、手順をバッチファイルに書きそれを実行するなどの工夫をしておくのが転ばぬ先の杖になると思います。どのディレクトリーで実行したかも大事なので先頭にcdも書いておくのがよいかも知れません。 もっともIDEを使った方が安全確実ではありますが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問