AIと戦って、あなたの人生のリスク診断 >>

現在大学でJavaを勉強しており、家のパソコンで開発環境を整えようとしていますが、不具合が発生したので質問させてください。

まず、kadaiというフォルダに、「Test.java」「Stack.java」というファイルがあり、Test.javaの中にmain関数が、Stack.javaにStack関数がそれぞれ入っています。
コマンドプロンプトを用いてTest.javaをコンパイルしようとしたところ、「シンボルを見つけられません シンボル:Stack」というエラーが発生してしまいました。

大学では、main関数のあるファイルをコンパイルすれば、Stack.javaも自動的にコンパイルされると言われ、実際それで実行できました。
恐らく家のパソコンの設定に不備があるのでしょうが、どうすれば解消できるのでしょうか?

ところどころ日本語がおかしくてすみません。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

コンパイルはどのように実行していますか?


antですか?javacですか?
antであれば、xmlの内容、
javacであれば、引数はどのように指定していますか?

>「シンボルを見つけられません」というエラーの発生原因
は「Stack.java」がコンパイルされていないからなので、
はじめに「Stack.java」をコンパイルしてあげれば、解消すると思われます。

> main関数のあるファイルをコンパイルすれば、Stack.javaも自動的にコンパイルされると言われ
ということは、自動的にコンパイルされる仕組みがあるはずですので、
そこを理解しないと同じ環境にはできないですね。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qシンボルを見つけられません

javaについて勉強しているのですが、円の中に四角を作るというプログラムを作ろうとしたところ
tes.java:43:シンボルを見つけられません。
シンボル:メソッド drawSquare(int,int,int,java.awt.Graphics)
場所:Assortのクラス
a.drawSquare(x,y,w,g);

というエラーが出てコンパイルできません。drawCircleからdrawSquareを実行するようにしたいのですが、どうしたらよいか教えていただけないでしょうか。


importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
public class tes {
static MyCanvasmc;
public static void main(String[] args) {
tes ac_listener = new tes();
JFramejf = new JFrame("tes");
JPanel p = new JPanel();
mc = new MyCanvas();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mc.setPreferredSize(new Dimension(700,700));
jf.getContentPane().add(mc);
p.add(mc);
jf.getContentPane().add(p);
jf.pack();
jf.setVisible(true);
}
}

abstract class Assort{
double x,y;
}

class Square extends Assort{
public void drawSquare(int x, int y, int w, Graphics g) {
double k=Math.sqrt(2);
double _w=w/2/k;
g.drawRect(x-(int)_w/2, y-(int)_w/2, (int)_w, (int)_w);
}
}

abstract class Circle extends Assort{
}

class Circle1 extends Circle {
Assort a;
Circle1(Assort _a) {
a = _a;
}
void drawCircle(int x, int y, int w, Graphics g){
g.drawOval(x-w/4,y-w/4,w/2,w/2);
a.drawSquare(x,y,w,g);
}
}
class MyCanvas extends JPanel {
public void paintComponent( Graphics g ) {
super.paintComponent(g);
Circle1 d1 = new Circle1 ( new Square() );
d1.drawCircle(350,350,700,g);
}
}

javaについて勉強しているのですが、円の中に四角を作るというプログラムを作ろうとしたところ
tes.java:43:シンボルを見つけられません。
シンボル:メソッド drawSquare(int,int,int,java.awt.Graphics)
場所:Assortのクラス
a.drawSquare(x,y,w,g);

というエラーが出てコンパイルできません。drawCircleからdrawSquareを実行するようにしたいのですが、どうしたらよいか教えていただけないでしょうか。


importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
public class tes {...続きを読む

Aベストアンサー

Circle1クラスの中でaの型はAssortであり、AssortにはdrawSquareメソッドがないから、エラーになるのは当たり前。
aや_aの型をAssortからSquareに変えれば解決。

QAntでのビルドにエラー

いつも参考にさせて頂いています。
表題の件ですが、現在Eclipse3.1・struts1.2.9を使用しています。
Antでのコンパイルをしてみたのですが、コンパイルエラーになります。
■エラー内容
シンボルを解決できません。
[javac] シンボル: クラス LookupDispatchAction

LookupDispatchActionを継承しているクラスでは確かにインポートしています。(インポートしていないとエラーになると思うのですが、ソース上でエラーは出ていません)

■build.xmlの中身
<?xml version="1.0" encoding="UTF-8" ?>
<project name="aaa" default="compile" basedir=".">
<property name="srcdir" value="JAR" />

<!-- JARディレクトリの作成-->
<target name="mkdir">
<mkdir dir="${srcdir}" />
</target>
<!-- コンパイル -->
<target name="compile" depends="mkdir">
<javac srcdir="javaSource" destdir="${srcdir}" excludes="build.xml" />
</target>
</project>

何かbuild.xml上でstrutsライブラリのパスとかを指定しないと認識してくれないのでしょうか?
どうかご教授宜しくお願いします。

いつも参考にさせて頂いています。
表題の件ですが、現在Eclipse3.1・struts1.2.9を使用しています。
Antでのコンパイルをしてみたのですが、コンパイルエラーになります。
■エラー内容
シンボルを解決できません。
[javac] シンボル: クラス LookupDispatchAction

LookupDispatchActionを継承しているクラスでは確かにインポートしています。(インポートしていないとエラーになると思うのですが、ソース上でエラーは出ていません)

■build.xmlの中身
<?xml version="1.0" encoding="UTF-8" ?>
<p...続きを読む

Aベストアンサー

resがつかないようなので、ちょっと思いついたことを。

>LookupDispatchActionを継承しているクラスでは確かにインポートしています。

これは、ソースコードでの話ですよね? つまり、Eclipseのプロジェクトでは作成時にエラーは出てない、と。それはプロジェクトで、Strutsを参照するようになっているからでしょう。
 プロジェクトの通常のビルドならビルドできますか? それでできて、Antでできないなら、単純にAntから参照先が見えないだけでしょう。
 <javac>タグ内にclasspath属性を追加して、<javac classpath="/hoge/hoge" ~ >というように参照先のクラスパスをつけてビルドしたらどうでしょうか。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qコンパイルエラー がありませんの意味が分かりません。

コンパイルエラー <identifier>がありませんの意味が分かりません。教えていただけないでしょうか。

Aベストアンサー

//フレームにラベルをセット(BorderLayoutの残りエリア
frame.add(label,BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

この部分の}が余分なのではないでしょうか。

//フレームにラベルをセット(BorderLayoutの残りエリア
frame.add(label,BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//}
こうすれば良いかと。

Qpublic static void main (String args[])

基本すぎて申し訳ありませんが、
public static void main (String args[])とはどういう意味を持っていますか?
教えてください。。

Aベストアンサー

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

public class ArgsTest{
  public static void main(String[] args){
    System.out.println(args.length);
    for(int i = 0 ; i < args.length ; i++){
      System.out.println(args[i]);
    }
  }
}

これを
>java ArgsTest abcde fghij(エンター)
として実行するとabcdeとfghijが引数となります。

ちなみに、mainはpublicでstaticなメソッドなので、
public class ArgsTest2{
  public static void main(String args[]){
    tamesi();
  }
  void tamesi(){
    String[] test = {"abcde","fghij"};
    ArgsTest.main(test);
  }
}
のように、外部のクラスからクラス名.mainで呼び出せます。(この2つのプログラムは、私が悩んだ時に試しにつくったものです)

ちなみにargsはarguments(=引数)の略で、mainの引数として、よく使われます。
argvのほうはargument valueの略です。C言語を使っていた人の中にはargvを使う人がいるかもしれません。

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

public class ArgsTest{
  public static void main(String[] args){
    System.out.println(args.length);
    for(int i = 0 ; i < args.length ; i++){
      System.out.println(args[i]);
    }
  }
}

...続きを読む

Q同一パッケージにあるクラスが見つからないエラー

Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。

tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。

C:\(中略)\mangasearch>javac tagsrch.java
tagsrch.java:11: エラー: シンボルを見つけられません
public static List<manga> searchByKey(String k[]) throws IOException{
^
シンボル: クラス manga
場所: クラス tagsrch
tagsrch.java:14: エラー: シンボルを見つけられません
manga[] list = new manga[cnum];


同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。
ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。

初歩的質問で申し訳ありませんが、よろしくお願いいたします。


-参考-
1.いろいろ試したこと
 1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。
 eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。

 1-2.クラスパスを入れてコンパイルしてみる。
 同一パッケージ内なので、この必要はないはずですが、
 C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。
 
下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。
 1-1.1-2.の参考URL:http://oshiete.goo.ne.jp/qa/2520327.html

 1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。
 分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。
publicつけたままだと、
C:\(中略)\mangasearch>javac mangalist.java
mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣
言する必要があります

となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch

このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。


2.mangalist.java/tagsrch.javaについて
mangalist.javaのコンパイルはできています。
mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。

■mangalist.java
package mangasearch;
class manga{
フィールド名
・・・
   manga(){
   //コンストラクタ
   }
}

■tagsrch.java
public class tagsrch extends manga{
メソッド{
    }
}

Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。

tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。

C:\(中略)\mangasearch>javac tagsrch.java
tagsrch.java:11: エラー: シンボルを見つけられません
public static List<manga> searchByKey(String k[]) throws IOException{
...続きを読む

Aベストアンサー

> 1-2.クラスパスを入れてコンパイルしてみる。
>  同一パッケージ内なので、この必要はないはずですが、
>  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。

javacでコンパイルするなら、
classpath/パッケージ/クラス
と探すので、これだと、
C:\(中略)\mangasearch/mangasearch/manga.class
を探しにいっちゃいますよ。
classpathに指定するディレクトリを、もう1つ上の階層にしてみてください。

eclipseとjavacとどっちを使いたいのはわからないのですが、
eclipseなら
プロジェクト名/src/mangasearch/mangalist.java
プロジェクト名/src/mangasearch/tagsrch.java
になってますか?

QJavaで改行などが出来ないのです。

 Java の事で質問です。 
 

 System.out.println("このようにしても\n");

 改行できません。
 
 このようにしても\n   

 と表示されてしまいます。どうしてでしょう。ちなみにOSはMacOS9.1です。なにか関係があるのでしょうか?

Aベストアンサー

> class amigo{
> public static void main(String args[]) {
> System.out.print("aaaaaaaa");
> System.getProperty("line.separator");
> System.out.print("bbbbbbbb");
> }
> }
> のような使い方でしょうか?

String line_sep = System.getProperty("line.separator");
System.out.println("あいうえお" + line_sep + "かきくけこ");

こうです。

QJavaでclass,interfaceまたはenumがありませんというエラーが出ます…

以下のプログラムで同じエラーが2個出てしまいます。
C:¥UsersNEC-PCUser>cd c:¥YJSample¥01
c:¥YJSample¥01>javac Sample1.java
Sample1.java:1:エラー:class、interfaceまたはenumがありません
Class Sample1

Sample1.java:6:エラー:class、interfaceまたはenumがありません
エラー2個

初歩的でお恥ずかしいですが、よろしくお願いします。

Aベストアンサー

大文字と小文字は区別される.

QJava 他クラスの呼び出しが上手くいきません。

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
import com.nttdocomo.ui.*;

public class Test01 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p1 = new Panel();
p1.setTitle("p1");
Label lbl1=new Label("p1に居ます。");
p1.add(lbl1);
Button btn1=new Button("next");
p1.add(btn1);
p1.setComponentListener(this);
Display.setCurrent(p1);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
Test02 test02 =new Test02(); //ここでエラーが発生します。
Display.setCurrent(test02);
lbl1.setText("p2に遷移");
}
}
}

}

============
Test02.java
============
import com.nttdocomo.ui.*;

public class Test02 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p2 = new Panel();
p2.setTitle("p2");
Label lbl1=new Label("p2に居ます。");
p2.add(lbl1);
Button btn1=new Button("next");
p2.add(btn1);
p2.setComponentListener(this);
Display.setCurrent(p2);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。
}
}
}

}

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
impo...続きを読む

Aベストアンサー

「シンボルを見つけられません。」でコンパイルできないのは、
Test01クラスからTest02クラスを見つけられないことが原因かと思われます。

No.1様は
==
Test01とTest02は同じパッケージですか?
違うのであればTest01にimport xxxx.Test02;を記述する必要がある
==
とおっしゃってるように思います。


原因がご理解できないようでしたら
まずはJavaの勉強をしたほうがよろしいかと思います。


人気Q&Aランキング