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

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

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

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

Q&A

解決済

4回答

388閲覧

このコードにmainメソッドをつけてください。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaFX

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

0グッド

0クリップ

投稿2019/06/07 05:11

編集2019/06/07 06:20

JavaFXの参考書でEclipseを使って勉強しています。実行するとmainメソッドがありません。と出て実行できないのですが、このコードにmainメソッドをつけ方がわからないので教えていただけませんか。
エラー画面は
Java Virtual Machine Launcher
error: Could not create the Java Virtual Machine.
error: A fatal exception has occurred.Program will exit.

と出ています。

// LineClass.java package topic01; import java.util.ArrayList; import java.util.List; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.stage.Stage; class Line { double lineWidth; // フィールド宣言 double ypos; Color lineColor; public Line() // コンストラクタ { this(1.0,20,Color.BLACK); } public Line(double y) { this(1.0, y, Color.BLACK); } public Line(double y, Color col) { this(1.0, y, col); } public Line(double linewidth, double y, Color col) { lineWidth = linewidth; ypos = y; lineColor = col; } // 線を描く public void drawLine(GraphicsContext gc) { gc.setLineWidth(lineWidth); gc.setStroke(lineColor); gc.strokeLine(10, ypos, 230, ypos); } } public class LineClass extends Application { @Override public void start(Stage stage) throws Exception { stage.setTitle("LineClass"); stage.setWidth(260); stage.setHeight(110); Group root = new Group(); final Canvas canvas = new Canvas(250,250); GraphicsContext gc = canvas.getGraphicsContext2D(); // 線を作成する List <Line> lines = new ArrayList<Line>(); lines.add(new Line()); lines.add(new Line(30.0)); lines.add(new Line(40.0, Color.BLUE)); lines.add(new Line(2.0, 50.0, Color.ROSYBROWN)); // 線を描く for(Line line : lines) line.drawLine(gc); root.getChildren().add(canvas); stage.setScene(new Scene(root, 300, 300)); stage.show(); } }

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

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

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

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

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

guest

回答4

0

ベストアンサー

実行するクラスにmainメソッドを入れましょう。
JavaFXならApplicationを継承したクラスですかね。


質問者様は解決されたようですが、他の方がコメントのやり取りを見て混乱するといけないので少し詳細に書いておきます。

私はJavaFXのプログラムを書く際、毎回mainメソッドでlaunch(args)を書いていたタイプなので知らなかったのですが、
Java8以上のJVMではmainメソッドがなく、JavaFXのApplicationクラスを継承したクラスがある場合はJavaFXを起動する処理が走るようです。

コードを解析してまとめてくれている記事がありましたので、そちらを参考にしてもらえればと。
JavaFXアプリケーションクラスにmainメソッドがなくてもよい訳

どうやらJavaFXはmainメソッドがなくても動かせる手段があるみたいです。
(JARファイルに埋め込まれている場合らしい)

ですが、IDEとかではmainメソッドがなくても動く保証はないので、入れておいた方が良いというORACLE情報です。
https://docs.oracle.com/javafx/2/get_started/hello_world.htm
(パッと探したので古い情報の記事です。探せば日本語訳もあるでしょう。)

質問者様が使用している参考書を読んでいないので詳細は不明ですが、
mainメソッドを書いて損はないはずですので、入れたほうが良いかと思います。

投稿2019/06/07 05:21

編集2019/06/10 02:39
dice142

総合スコア5158

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

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

退会済みユーザー

退会済みユーザー

2019/06/07 05:35

ありがとうございます。このコードにmainメソッドをどんなふうに書くのでしょうか。 参考書の1章でつまずいています。
dice142

2019/06/07 05:38

え、むしろ参考書に書いてないのですか? 現在読んでいるところの前に書いてないのでしょうか?
dice142

2019/06/07 05:44

書いてないなら書いてないで構わないのですが、書いてないならその参考書は避けたほうが良い気がします。 第1章で実行できない参考書はおそらくあとで詰まります。
退会済みユーザー

退会済みユーザー

2019/06/07 05:46

ええ、書いてないのです。
退会済みユーザー

退会済みユーザー

2019/06/07 05:55

public class LineClass extends Application {...} がメイン関数ですかね。2章からJavaFXのコードが出てきて、同じようなコードを実行したら実行できたので、これで実行可能なはずなんですが、 エラー画面: Java Virtual Machine Launcher error: Could not create the Java Virtual Machine. error: A fatal exception has occurred.Program will exit. が関係あると思うのですが。
dice142

2019/06/07 06:04

それはJavaFXアプリを起動するためのクラスですね。 Javaでは関数とは言いません。 必要なものは「mainメソッド」ですよね。 > 2章からJavaFXのコードが出てきて 質問文に載っているのは参考書のコードではないのですか…?
退会済みユーザー

退会済みユーザー

2019/06/07 06:15

参考書のコードです。とりあえずこのコードをパスして参考書を復讐します。 教えていただいたURLも練習して表示できました。ありがとうございました。
dice142

2019/06/07 06:23

2章からJavaFXのコードが出てきたと仰っているのに、1章を勉強中のコードが実行できないという質問がよくわかりません。 > 教えていただいたURLも練習して表示できました。 違います、そこのコードを実行してみてくださいということではなく、 そこのコードのmainメソッドを参考にしてくださいという意味です。
退会済みユーザー

退会済みユーザー

2019/06/07 06:42

すみません。JavaFXはmainメソッドなしでも実行できるみたいです。 mainメソッドの作り方はわかりました。 いまエラーの解析中です。ネットでもうすこし調べてみます。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/06/07 06:43

mainメソッドを参考させていただき、やり方は分かりました。
KSwordOfHaste

2019/06/08 13:16

実際にはoracleのページに書いてあることは「どうなのかな?」と疑問を持ちました。これまで自分はJavaFXアプリをmainなしに動かしてきました。jarにしなくても問題ありません。ただしJava8以降のJVMを使うのが前提になります。Java7以前ではmainメソッドが必要でした。しかしJava8以降のJVMにはメインクラスがJavaFXアプリケーションクラスならmainメソッドを経由せずにstartメソッドまで動かしてくれる特別なランチャーが組み込まれています。Java8以降ならアプリケーションがjarになっていようがなっていまいが関係なくmainメソッドは不要というわけです。
退会済みユーザー

退会済みユーザー

2019/06/09 01:08

ありがとうございます。Java8でJavaFXの勉強には入れました。
dice142

2019/06/10 02:35

> KSwordOfHaste様 コメントを元に検索してみたらコードを解析している記事を発見致しました。 たしかにJava8以降のJVMの仕様のようです。 ご指摘ありがとうございました。
KSwordOfHaste

2019/06/10 03:26

Java11でJavaFXがJDKから外れてしまったためこの特別ランチャーもなんだかいびつな機能になってしまった感があるようなないような・・・ 複雑な気分です。
guest

0

追伸
Eclipse.iniの-vmargsの前に

-vm
C:\pleiades\java\8\bin\javaw.exe

を追加しました。

投稿2019/06/07 08:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

public class LineClass extends Application {
public static void main(String[] args){
launch(args);
}

...

}
ネットで試行錯誤して上記のmainメソッド追加でようやくできました。ずっと前にこの参考書をやったときは
すんなり実行できたのですが、今回は苦戦しましたが、また勉強になりました。
dice142さん、y_waiwaiさんありがとうございました。これで復習に取り掛かれます。

投稿2019/06/07 08:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

public static int main() { return 0;}
をどっかのクラスの下においておこう

投稿2019/06/07 05:18

y_waiwai

総合スコア87747

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

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

退会済みユーザー

退会済みユーザー

2019/06/07 05:40

いつもお世話になっております。JavaFxのコードの復讐をしています。 jdk8に戻してJavaFxのコードは実行できるようになりました。 参考書の1章にあるこのコードにmainメソッドがないので、実行できないで困っています。 具体的に教えていただけませんか。お願いいたします。
y_waiwai

2019/06/07 05:42

実行したいコードをその中に書けばいいのです
退会済みユーザー

退会済みユーザー

2019/06/07 05:45

大変お恥ずかしいのですが、さっぱりわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問