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

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

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

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Q&A

2回答

1360閲覧

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

toukou

総合スコア0

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

0グッド

1クリップ

投稿2020/11/06 16:59

編集2020/11/15 11:02

前提・実現したいこと

旧題: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個

該当のソースコード

Java

1import javafx.application.Application; 2import javafx.stage.Stage; 3import javafx.scene.Scene; 4import javafx.scene.layout.FlowPane; 5import javafx.scene.control.Button; 6 7// アプリケーション 8public class demo extends Application{ 9 // startメソッドをオーバーライドする 10 public void start(Stage stage){ 11 // stageの基本設定 12 stage.setTitle("タイトル"); 13 stage.setWidth(800); 14 stage.setHeight(500); 15 // Controlの設定 16 Button button1 = new Button("ボタン1"); 17 Button button2 = new Button("ボタン2"); 18 // Paneの設定 19 FlowPane root = new FlowPane(); 20 root.getChildren().add(button1); 21 root.getChildren().add(button2); 22 // 仕上げ 23 Scene scene = new Scene(root); 24 stage.setScene(scene); 25 stage.show(); 26 } 27 public static void main(String[] args){ 28 launch(); // アプリケーション起動 29 } 30}

試したこと

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

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

demo.java:2: エラー: class、interfaceまたはenumがありません package javafx.stage.Stage; ^ demo.java:3: エラー: class、interfaceまたはenumがありません package javafx.scene.Scene; ^ demo.java:4: エラー: class、interfaceまたはenumがありません package javafx.scene.layout.FlowPane; ^ demo.java:5: エラー: class、interfaceまたは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
題名を変更しました。

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

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

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

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

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

guest

回答2

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/20 15:31

YT0014

総合スコア1708

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

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

toukou

2020/11/27 13:54

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

0

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

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

投稿2020/11/06 17:54

q_sane_q

総合スコア610

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

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

toukou

2020/11/07 03:40

回答ありがとうございます。 OpenJFXは解決する為に調べてた時に出た記事でも話があったので調べて導入しました。 また、友人に相談した時にも再度入れなおしています。 導入出来ているか確認する方法を知らない為、導入が成功しているかはわかりませんがエラーに変化はありませんでした。
q_sane_q

2020/11/07 04:02

自分でもjava環境作ってやってみたんですが 生のJava12でコンパイル→質問に記載のあるエラー OpenJFXをマージしたJava12でコンパイル→正常に動作 という結果でした。 コマンドに「javac」と叩いているようですが、パスの通っているjavacはOpenJFXの入ったJDKになっているでしょうか?
toukou

2020/11/07 08:48

マージしたJavaを制作したのですが、変わらずエラーを出していました。 パスの通っているjavacはOpenJFXの入ったJDKになっているでしょうか? →パスを確認して再度コンパイルしましたが、同じエラーが出ました。
q_sane_q

2020/11/07 09:10

あとは思いつくのはjavacを指すパスが環境変数に複数書かれていて先にfxが入ってない方が反応している、あたりでしょうか… JFXがマージされたJDKフルパス指定でjavacの実行は行ってみましたか?
toukou

2020/11/07 14:06

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

2020/11/07 14:11

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

2020/11/08 01:58

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問