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

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

ただいまの
回答率

88.04%

JavaFXのPackageとimportについての質問

受付中

回答 2

投稿 編集

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

score 0

前提・実現したいこと

旧題:Applicationクラスのコンパイルが行えないので詳しい方が居たら助言をしてほしいです。

大学の授業でJavaを勉強しています。
個人的な制作物としてミニゲームを作ろうと思いPaneの上にPaneを乗っけれるかを試そうと思ったのですが、それ以前の部分でとりあえず実行ファイルを作ろうとして行ったコンパイルができません。
また、大学で講義を行っている先生も勉強中なので正確な回答が得られるか不明な為、ここで質問させていただきました。

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

demo.java:8: エラー: パッケージjavafx.applicationは存在しません
import javafx.application.Application;
                         ^
demo.java:9: エラー: パッケージjavafx.stageは存在しません
import javafx.stage.Stage;
                   ^
demo.java:10: エラー: パッケージjavafx.sceneは存在しません
import javafx.scene.Scene;
                   ^
demo.java:11: エラー: パッケージjavafx.scene.layoutは存在しません
import javafx.scene.layout.FlowPane;
                          ^
demo.java:12: エラー: パッケージjavafx.scene.controlは存在しません
import javafx.scene.control.Button;
                           ^
demo.java:22: エラー: シンボルを見つけられません
public class demo extends Application{
                          ^
  シンボル: クラス Application
demo.java:24: エラー: シンボルを見つけられません
        public void start(Stage stage){
                          ^
  シンボル:   クラス Stage
  場所: クラス demo
demo.java:30: エラー: シンボルを見つけられません
                Button button1 = new Button("ボタン1");
                ^
  シンボル:   クラス Button
  場所: クラス demo
demo.java:30: エラー: シンボルを見つけられません
                Button button1 = new Button("ボタン1");
                                     ^
  シンボル:   クラス Button
  場所: クラス demo
demo.java:31: エラー: シンボルを見つけられません
                Button button2 = new Button("ボタン2");
                ^
  シンボル:   クラス Button
  場所: クラス demo
demo.java:31: エラー: シンボルを見つけられません
                Button button2 = new Button("ボタン2");
                                     ^
  シンボル:   クラス Button
  場所: クラス demo
demo.java:33: エラー: シンボルを見つけられません
                FlowPane root = new FlowPane();
                ^
  シンボル:   クラス FlowPane
  場所: クラス demo
demo.java:33: エラー: シンボルを見つけられません
                FlowPane root = new FlowPane();
                                    ^
  シンボル:   クラス FlowPane
  場所: クラス demo
demo.java:37: エラー: シンボルを見つけられません
                Scene scene = new Scene(root);
                ^
  シンボル:   クラス Scene
  場所: クラス demo
demo.java:37: エラー: シンボルを見つけられません
                Scene scene = new Scene(root);
                                  ^
  シンボル:   クラス Scene
  場所: クラス demo
demo.java:42: エラー: シンボルを見つけられません
                launch(); // アプリケーション起動
                ^
  シンボル:   メソッド launch()
  場所: クラス demo
エラー16

該当のソースコード

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.FlowPane;
import javafx.scene.control.Button;

// アプリケーション
public class demo extends Application{
    // startメソッドをオーバーライドする
    public void start(Stage stage){
        // stageの基本設定
        stage.setTitle("タイトル");
        stage.setWidth(800);
        stage.setHeight(500);
        // Controlの設定
        Button button1 = new Button("ボタン1");
        Button button2 = new Button("ボタン2");
        // Paneの設定
        FlowPane root = new FlowPane();
        root.getChildren().add(button1);
        root.getChildren().add(button2);
        // 仕上げ
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args){
        launch(); // アプリケーション起動
    }
}

試したこと

基本的にMethodではなく、packageやimportの問題だと思っており、そこを弄りました。以下は、弄った方法一覧です。

Case1「importをpackageに置換」

importをpackageに置換しました。エラーは減りましたが以下のエラーが発生し、調べても解決には至りませんでした。

demo.java:2: エラー: classinterfaceまたはenumがありません
package javafx.stage.Stage;
^
demo.java:3: エラー: classinterfaceまたはenumがありません
package javafx.scene.Scene;
^
demo.java:4: エラー: classinterfaceまたはenumがありません
package javafx.scene.layout.FlowPane;
^
demo.java:5: エラー: classinterfaceまたはenumがありません
package javafx.scene.control.Button;
^
エラー4個

Case2「頭にpackage クラス名をつける」

package.demo;
上の文をimportの前に追加しました。エラーは最初のエラーと同じでした。
packageについて全くと言っていいほど習っておらず困っています。

Case3「友人に相談する」

ここで悩み友人に相談しました。そして、ファイルの構成が違う方法を教えていただきました。

ファイル構成
game
   -classes
   -package
   -src

なおかつpackageに指定されたjarファイル等を導入し、srcにコンパイルしたいdemo.javaを入れました。
その上でコマンドプロンプトで以下を入力しました。

javac -d classes -cp ./package\* src\demo.java

※正確に表示されないので画像を参考にしてください


イメージ説明
画像の通り、コンパイルは完了しましたが、実行に失敗しました。
classesファイルにクラスファイルは、生成されていました。

友人には色々手をつくしてもらったのでここで相談を終えました。
(元々Javaがメインで勉強してる言語ではない方だったので手間をかけては悪いと思いました)

補足情報

コンパイルとエディタについて

コンパイルはコマンドプロンプトにjavac ファイル名.javaでコンパイルしています。
エディタはサクラダエディタと言うテキストソフトを使い行っています。

また、開発環境としてはJDK1.12を利用しています。
※今回の問題で最新の物をDLして1.15も持っています。

不明な部分があったらコメントお願いします。

追記

追記1
最初に回答していただいた方のパスの話で言われた方法の正確なやり方が分からずに思いつくパターンを一通りやりましたが、「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と出ます

イメージ説明

追記2
題名を変更しました。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

0

JavaFXですが、確かJava11からJDKに標準で同梱されなくなりました。
なので使用するにはOpenJFXの導入が必要と思います。

すいません、Javaは離れて久しいので自分でやったことはありません。
検索すれば方法が出てくると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/11/07 23:06

    フルパス指定がコントロールパネルのシステムでパスを指定してやる事ならやりましたがダメでした。
    意味が違ったらすいません。

    キャンセル

  • 2020/11/07 23:11

    例えば
    >javac demo.java
    と打つのではなく
    >C:\java\jdk\bin\javac demo.java
    と打つという意味ですがどうでしょうか

    キャンセル

  • 2020/11/08 10:58

    質問文に追記した様な形で試しましたがダメでした。
    もし、やり方が説明される記事がありましたら教えていただけると助かります。
    お手数をおかけしてすみません。

    キャンセル

0

闇雲に対応するのではなく、記述のコードが何を意味しているのか、エラーメッセージが何を意味しているのか、一歩づつ理解して対応しましょう。

とりあえず、import、packageに関しては、検索してきちんと理解してください。

javac -d classes -cp ./package\* src\demo.java

当初のエラー(エラー:パッケージ*が~)は、必要なjavaのクラスファイルパッケージが、指定された範囲に存在しなかった、というものです。
通常、クラスファイルパッケージは、jar形式を利用しますので、以後は、jarファイルの名称で示します。

では、上記のコマンドでは、なぜ、コンパイルできたのでしょうか?
これは、-cp(略さない場合、classpath)で、jarファイルを検索する場所を指定したからです。
このcpオプションは、調べましたか?

javafx.application.Applicationなどが格納されたjarファイルが、packageフォルダの下に存在しています。
(*fx*.jarなどで該当フォルダを検索してみてください)

では、なぜ、実行できないのか?
エラーのjava.lang.NoClassDefFoundErrorは、検索などで調べましたか?

このエラーは、該当のクラスが見つからなかった、という意味です。
要は、コンパイル時のimportエラーと同じです。

なので、対応も同様です。
クラスパスオプションに、./package/*も、追記します。

java -cp class_demo;./package/* 

クラスパスの指定には、環境変数も使えますので、お調べください。

なお、このような設定に関する問題が頻発しますので、初心者には、Eclipseのような統合開発環境での学習が推奨されております。

備考

追記1にて、3つ目がコマンドエラーになっている理由は、空白を含むパスを""でくくっていないからです。
エラーを読むと、Programが実行できなかったことがわかります。

以下のコマンドをお試しください。
(コンパイルエラーになるとは思いますが)

"Program Files\Java\jdk-15.0.1\javac" demo.java

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/11/27 22:54

    回答ありがとうございます。おっしゃる通り、importやpackageを調べて問題の解決を試みます。
    一通りエラーや分からない部分を調べて行き詰った時に再度返信させていただこうと思います。

    ちなみに当初の問題についてはeclipseを使った開発環境を用意して解決しています。

    キャンセル

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

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

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