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

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

ただいまの
回答率

90.51%

  • Java

    13836questions

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

コンパイルしたら複数のファイルが生成された

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 333
退会済みユーザー

退会済みユーザー

前提・実現したいこと

これはエラーというかこのままでも大丈夫なのかわからないのでそれを知りたいです

発生している問題・エラーメッセージ

「KeyType.class」「StrongBox.class」「StrongBox$1.class」の3つもクラスファイルが生成されてしまいました。

エラーメッセージ
Error: Main method not found in class StrongBox, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
StrongBoxクラスを作るという練習問題を解いているときに起こったもので、まだMain.javaなどを使って実行する段階ではありません

該当のソース

使用言語:Java(8)

KeyType.java
~~~~~~~~~
enum KeyType {
PADLOCK, BUTTON, DIAL, FINGER;
}
~~~~~~~~~

StrongBox.java
~~~~~~~~~
public class StrongBox <E> {
private KeyType keyType;
private long count;
private E data;

public StrongBox(KeyType key){
this.keyType = key;
}
public void put(E data){
this.data = data;
}
public E get(){
this.count++;
switch(this.keyType){
case PADLOCK:
if(count < 1024){
return null;
}
break;
case BUTTON:
if(count < 10000){
return null;
}
break;
case DIAL:
if(count < 30000){
return null;
}
break;
case FINGER:
if(count < 1000000L){
return null;
}
break;
}
this.count = 0;
return this.data;
}
}
~~~~~~~~~

試したこと

そもそも集合って修飾子を使って良いものなのだろうかとは思いつつも列挙型集合KeyTypeの修飾子を書き換えてみたりしました。(コンパイルできなくなった)

補足情報(言語/FW/ツール等のバージョンなど)

Java8だったと思います Cloud9というWeb上で実行できるIDEを使っています

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+3

「KeyType.class」「StrongBox.class」「StrongBox$1.class」の3つもクラスファイルが生成されてしまいました。 

Javaではenumだろうがprivateだろうがpublicだろうが内部クラスであろうが関係なくクラスごとに必ず独立なclassファイルが生成されます。

まだMain.javaなどを使って実行する段階ではありません 

Cloud9を使ったことがないのですが、その環境でStrongBox.javaに対してプログラムの実行を意味する操作をされたのではないでしょうか?それゆえStrongBox.javaがコンパイルされ、コンパイルエラーがなかったので実行しようとしたのだろうと思います。

しかし、StrongBoxクラスにメインメソッドがなかったため「実行できません」というエラーが出たのだろうと思います。

Error: Main method not found in class StrongBox, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

このメッセージが言わんとしていることは(直訳したまんまですが)、

エラー: StrongBoxクラスにメインメソッドがありません。public static void main(String[] args)のようにしてメインメソッドを定義してください。
...

最後の1行は(JavaFXを用いた)GUIアプリケーションのケースのことを言っているだけで本件では気にしなくていいです。(JavaFXアプリケーションではmainメソッドを書かなくても実行できるためこういうメッセージになっているだけです)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/01 16:46

    コピペ元のインデントが反映されずとても読みにくいコードになっているのに読んでくれてありがとうございます。本当にごめんなさいm(_ _)m

    -Javaではenumだろうがprivateだろうがpublicだろうが内部クラスであろうが関係なくクラスごとに必ず独立なclassファイルが生成されます。

    いまいちまだわからないのですが、StrongBoxのなかにインナークラスがある際にアウタークラスのStrongBoxとインナークラスStrongBoxを区別するためにクラスファイル名に$1が追加されるという理解で正しいのでしょうか?
    もしそうだとして、上記のStrong.javaファイル内のStrongBoxクラスの中にはインナークラスが存在しないと思ったのですが、他の理由なのでしょうか?

    キャンセル

  • 2018/01/01 18:29

    > インデントが反映されず
    その点に気づかれた点はよいと思います。ぜひ質問文を編集し、閲覧者が見やすいようにコード用のマークアップをするようにしてみてください。編集画面で行範囲を選択して<code>ボタンを押すとできます。本サイトのヘルプにも(よくみれば)やりかたが書いてありますよ?
    > StrongBox$1.class
    これについてはあまり気にしない方がよい気がします。正確に知るにはJava VM仕様を知らねばなりませんが、そんなものを意識する必要は大抵の場合ないです。生成されたクラスファイルは「実行に必要だからコンパイラーが生成した」ぐらいに思っておけばよいでしょう。本件についていえばenumのswitch文の動作の都合でコンパイラーが自動的に生成したクラスファイルのようです。

    キャンセル

  • 2018/01/01 18:35

    ごめんなさい。これからはもっと事前に調べて配慮できるようにします。
    まだまだ僕には早い段階のものだったんですね…。
    親切に教えてくれてありがとうございました!

    キャンセル

  • 2018/01/01 20:06

    本サイトもそうですがQ&Aサイトに投稿される質問は質問者さんのためだけでなく閲覧者みんなが参考にするために存在するという点も考えてみるとよいと思います。

    いかに親切な閲覧者でもあなたの質問を編集してあげることはできません。たとえ解決になったとしても、不備があればできるだけ質問を編集しておくことをお勧めします。後から見る人のためということですね。質問した後でも質問文は編集できることを覚えておくとよいですよ。

    ちなみに自分が回答でそれを指摘しておけばよかったという話もあるのですが、あまりにコードのマークダウンをつけない人が多いので最近は指摘するのがめんどくさくなってきたのです・・・

    キャンセル

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

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

関連した質問

  • 解決済

    Labelが表示できません!

    前提・実現したいこと JavaFXでスプラッシュウィンドウを作ろうと思っています. しかし,実行してみたところ,Labelが表示されません. 発生している問題・エラーメッ

  • 解決済

    匿名クラスってわかりやすい例に例えると?またそのメリットは?

    JAVAを勉強している者です。説明が下手ですいませんが、「匿名クラス」って一体なんなんでしょうか?ネットや参考書みても「その場で使い捨てるクラス」と書いてあるんですが、そんな機能な

  • 解決済

    画面保持

    前提・実現したいこと カスタムコントローラ方式を使い画面遷移を行っています。画面遷移をする際、遷移前の画面のsceneをスタック等を用いて格納し、「戻る」のボタンを押したら格納さ

  • 解決済

    javafxのGUI作成。画面遷移がうまくいかない問題

    ただいま画面遷移の練習をしています。 下記に記述したコード1単体だと 『スタート』を押すと『タイトルに戻る』に遷移され、画面遷移がしっかりと出来ているのですが、コード1とコード2を

  • 解決済

    AnimationTimer()による画面の分岐

    前提・実現したいこと AnimationTimer()でサイクルをループさせたい 1.1つ目のボタンの表示 2.ボタン1(画像)が5回押されたら3に移行 (ボタン1が押され

  • 解決済

    JavaFXの画面遷移について

    前提・実現したいこと JavaFXでサーバー側とクライアント側に分かれたチャットソフトを作っています クライアント側からユーザー情報を入力(サインイン画面)→サーバー側が受信して応

  • 解決済

    TableViewで特定のセルのみ編集可能にしたい

    Java8 JavaFX でプログラムを作成しています。 TableViewで列の設定は編集不可にしている状態で 特定のセルのみ編集可能にする方法はありますでしょうか? ご

  • 解決済

    JavaFXでの画面遷移がわからないです。

    前提・実現したいこと JavaFXを使って画面遷移をさせたいのですが、やり方がよくわからないです。 発生している問題・エラーメッセージ java.lang.NullPointe

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

  • Java

    13836questions

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