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

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

ただいまの
回答率

90.83%

  • Java

    12490questions

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

  • コマンドプロンプト

    261questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 165

newyee

score 60

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

package comment;

public class Zenhan{

    public static void dowarusa(){

        System.out.println("きなこでござる。くえませんがの。 ");
    }

    public static void doTogame(){

        System.out.println("このおいぼれの目はごまかせませんぞ。 ");

    }
}


以下は、Kohan.javaです。

package comment;

public class Kohan {

    public static void callDeae(){

        System.out.println("えぇい、こしゃくな。 くせものだ!であえい!");


    }

    public static void showMondokoro() throws Exception {

        System.out.println("飛車さん、角さん、もういいでしょう。 ");
        System.out.println("この紋所が目に入らぬか!");

        zenhan.doTogame();

    }
}


以下はMidlle.javaです

import comment.Zenhan;

public class Midlle {

    public static void main(String[] args) throws Exception{

    Zenhan.dowarusa();
    Zenhan.doTogame();
    comment.Kohan.callDeae();
    comment.Kohan.showMondokoro();


    }    

}

コマンドプロンプトでは、以下のように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ファイルは作成されませんでした...

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2018/05/14 20:21

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

    キャンセル

  • newyee

    2018/05/14 20:45

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

    キャンセル

回答 1

checkベストアンサー

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 21: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/*」の部分について少しご解説願えますでしょうか...?

    キャンセル

  • 2018/05/14 21: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が出している一次情報源のところです。

    キャンセル

  • 2018/05/15 00:27

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

    キャンセル

  • 2018/05/15 18: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コマンドの仕様のようなものなのでしょうか...?

    キャンセル

  • 2018/05/15 18:36

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

    > 自動で作成されていたのは、javacコマンドの仕様のようなものなのでしょうか...?
    そういうことになるでしょう。

    キャンセル

  • 2018/05/16 11:23

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

    キャンセル

  • 2018/05/16 11:30 編集

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

    キャンセル

  • 2018/05/16 16:00

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

    キャンセル

  • 2018/05/16 18:45

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

    キャンセル

  • 2018/05/16 19:03

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

    もっともIDEを使った方が安全確実ではありますが・・・

    キャンセル

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12490questions

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

  • コマンドプロンプト

    261questions

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