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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

3366閲覧

Java シンボルが見つかりません

tani4

総合スコア0

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2020/12/30 22:06

編集2020/12/31 06:07

##前提・実現したいこと
お世話になります。

「A fatal error has been detected by the Java Runtime Environment:」
というメッセージが出てきて、作っているゲームがEclipseから実行できなくなってしまったのでプロンプトから実行することにしました。

すると、下記のようなエラーメッセージが表示されました。

GameMain.java:17: エラー: シンボルを見つけられません Panel p = new Panel(); ^ シンボル: クラス Panel 場所: クラス GameMain

この部分はEclipseで実行できていたときから書いていましたが、今までなんのエラーも出ていませんでした。

ググったところImportができていないと表示されるそうですが、Panelクラスは同じパッケージ内にあります。同じパッケージ内であればImportはいらないはずですよね?
ちなみにcdでGameMainやPanelといったクラスが存在するディレクトリまで移動しています。

なぜプロンプトから実行するとこのようなエラーが出るのでしょうか。
よろしくお願いいたします。

##実行環境
OS:Windows10
JDK:14
Eclipse:Eclipse IDE for Java Developers - 2020-09

##追記
実際のコードを載せるようにとのご指摘がありましたのでこちらに追記いたします。
ご指摘ありがとうございます。

Mainクラス

Java

1package com.original_game.janken; 2 3import java.io.File; 4 5import javax.sound.sampled.Clip; 6import javax.swing.JFrame; 7 8public class GameMain { 9 10 public static void main(String[] args) throws Exception { 11 JFrame frame = new JFrame("じゃんけんゲーム"); 12 frame.setSize(800,600); 13 frame.setLocationRelativeTo(null); 14 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 15 frame.setResizable(false); 16 17 Panel.createPanel(frame); 18 19 frame.setVisible(true); 20 21 File file = new File("C:\Users\user\Desktop\sample.wav"); 22 Clip clip = Sound.createClip(file); 23 clip.start(); 24 clip.loop(Clip.LOOP_CONTINUOUSLY); 25 Thread.sleep(3 * 1000); 26 clip.close(); 27 28 } 29} 30

Panelクラス

java

1package com.original_game.janken; 2 3import java.awt.BorderLayout; 4import java.awt.Color; 5import java.awt.Dimension; 6import java.awt.Font; 7 8import javax.swing.JFrame; 9import javax.swing.JLabel; 10import javax.swing.JPanel; 11 12public class Panel { 13 public static JLabel headerLabel; 14 public static JLabel contentsLabel; 15 16 public static void createPanel(JFrame frame) { 17 //ヘッダーパネル 18 Dimension headerPanelDimension = new Dimension(800, 50); 19 JPanel headerPanel = setPanel(Color.GRAY, headerPanelDimension); 20 headerLabel = new JLabel("「さあ、じゃんけんで勝負だ!」"); 21 headerLabel = setFont(Color.ORANGE,headerLabel,24); 22 headerPanel.add(headerLabel); 23 frame.add(headerPanel,BorderLayout.NORTH); 24 25 //コンテンツパネル 26 Dimension contentsPanelDimension = new Dimension(800, 450); 27 JPanel contentsPanel = setPanel(Color.WHITE,contentsPanelDimension); 28 contentsLabel = new JLabel("じゃんけん・・・"); 29 contentsLabel = setFont(Color.BLACK,contentsLabel,36); 30 contentsPanel.add(contentsLabel); 31 frame.add(contentsPanel,BorderLayout.CENTER); 32 33 //フッターパネル 34 Dimension footerPanelDimension = new Dimension(800, 100); 35 JPanel footerPanel = setPanel(Color.WHITE, footerPanelDimension); 36 Player.createButton(footerPanel); 37 frame.add(footerPanel,BorderLayout.SOUTH); 38 39 } 40 41 public static JPanel setPanel(Color color, Dimension PanelDimension) { 42 JPanel panel = new JPanel(); 43 panel.setPreferredSize(PanelDimension); 44 panel.setLayout(new BorderLayout()); 45 panel.setBackground(color); 46 return(panel); 47 } 48 public static JLabel setFont(Color clr, JLabel label, int strSize) { 49 label.setForeground(clr); 50 Font labelFont = new Font("Serif", Font.BOLD,strSize); 51 label.setFont(labelFont); 52 label.setHorizontalAlignment(JLabel.CENTER); 53 label.setVerticalAlignment(JLabel.CENTER); 54 return(label); 55 } 56 } 57

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

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

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

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

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

m.ts10806

2020/12/31 00:04

実際のコードと構成を提示されないと誰にも再現できないので、なんとも。
退会済みユーザー

退会済みユーザー

2021/01/14 17:41 編集

今回の質問って【なぜプロンプトから実行するとこのようなエラーが出るのでしょうか。】かなあ。 そうだとするとコードは関係なくて、Javaクラスパスやら実行にかかわる問題なので コマンドプロンプトで実際に行ったJavaプログラム実行試行までの、コマンドの履歴が欲しいですね。 > cdでGameMainやPanelといったクラスが存在するディレクトリまで移動しています と仰せなんでJavaプログラムの実行方法が間違っているのは明白だと思う。 tani4さんいかがでしょうか。 あと、過去の質問も解決有無関わらずちゃんとクローズして欲しいですね。 【受付中】のまま長期放置で解決したのか更に問題が出たのかなどの反応もないって結構回答者的にはテンションが落ちるので。
guest

回答1

0

質問はコマンドからの実行方法についてと解釈して…

問題点

ちなみにcdでGameMainやPanelといったクラスが存在するディレクトリまで移動しています。

このせいで、main関数があるクラスをjava.exeが見つけられずそんなクラスは無いと怒られ起動に失敗する。

またGUI系のライブラリも使っているはずなんでコマンドプロンプトから起動するのはちょっと面倒かなあ。
バッチファイルを作ってそっから起動するとかならまあ現実的。

Javaプログラムをコマンドプロンプトから実行する場合

よく使う構成だとこんな感じになる。

console

1> java -cp [クラスパスやJarファイル] [main関数をもつクラスのフルパッケージ名.クラス名]

提示されたGameMainクラスを実行するならこうなる。
ちなみにクラスはc:\janken\com\original_game\janken\GameMain.classに置いてあるとする。

console

1> cd /d c:\janken 2> java -cp [クラスパスやJarファイル] com.original_game.janken.GameMain

ちなみにこれは間違い。多分質問者さんはこれをやってる。

console

1> cd /d c:\janken\com\original_game\janken 2> java -cp [クラスパスやJarファイル] com.original_game.janken.GameMain

console

1> cd /d c:\janken\com\original_game\janken 2> java -cp [クラスパスやJarファイル] GameMain

最後にクラスパスの所に何を入れるんだって事なんですが、これは使用しているライブラリ(*.jar)を全部書く必要があります。(例外で環境変数CLASSPATHを利用する手もあるが…ここでは省く)

Eclipseで開発している時に追加したライブラリの一覧があるはずなんですが、
それを一つ一つ記載する必要があります。クラスパス同士はWin環境なら;(セミコロン)で区切る。
LinuxやMacなら:(コロン)で区切る。
もし、クラスパスに半角スペースとかが入るならダブルコーテーション等で括ればいい。

console

1> java -cp c:\lib\hoge.jar;c:\lib\fuga.jar com.original_game.janken.GameMain

これでもまだ起動に失敗する。作成しているプログラム自身のクラスパスも追加しないとダメ。
なので、.(ドット)を追記する。

console

1> java -cp .;c:\lib\hoge.jar;c:\lib\fuga.jar com.original_game.janken.GameMain

という事で、tani4さんの環境に合わせて適切なコマンドを組み立てて下さい。
十中八九クラスパスがものすごく長くなるので、テキストファイルかなんかでメモっておいた方が良い。

イマイチ理解できないようならそれこそこんな感じで段階的に慣らすといいと思う。

  1. package名を使わないでHelloWorldを作ってコマンド実行してみる
  2. package名を使ってHelloWorldを作ってコマンド実行してみる
  3. 何らかのライブラリを1つだけ使うようにしたHellowWorldを作ってコマンド実行してみる

投稿2021/01/14 17:29

編集2021/01/14 17:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問