javaでメインクラスが見つからないエラーが出てしまいます。

やさしい簡単なプログラム
class test
{
public static void main(String[] args)
{
System.out.println("Viva!");
}
}
をjavacでクラスファイルを作った後に(ここまではできます)java test.class を行うと
could not find the main class というエラーが出てしまいます。

教科書の通りにjdkをインストールして、パスを環境変数に通して、コマンドプロンプトでコンパイルしかしていません。
なにが悪いんでしょうか?

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

viva」に関するQ&A: VIVA イタリア!!

A 回答 (2件)

> しかし、java testを行うと


> エラー クラス名testが受け入れられるのは、注釈処理が明示的に表明されたときだけです
> となってしまいます。これはどうしてでしょうか?

それは

javac test

を実行したときのエラーでは?
実行はjavaコマンドでコンパイルがjavacコマンド。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
おっしゃるとおりでした。
打ち間違えが非常に多いですね。疲れているようです。

お礼日時:2010/07/25 23:20

もし、教科書に



java test.class

で実行するように書かれているならそれは教科書の誤り。

コンパイルは、

javac test.java

で、ファイル名test.javaを指定するが、実行は、

java test

で、クラス名testを指定する。

java test.class

とすると、test.classクラスというクラス(クラスファイル名としてはtestディレクトリ下のclass.class)を探して実行しようと試みる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。僕の読み間違えでした。
しかし、java testを行うと
エラー クラス名testが受け入れられるのは、注釈処理が明示的に表明されたときだけです
となってしまいます。これはどうしてでしょうか?

お礼日時:2010/07/25 22:46

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

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

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

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

QC++ クラスをメンバにもつクラスについて

お世話になります。C++初心者でうまくコードが書けません(><)
クラス1と2があり、クラス1のメンバにはクラス2があります。
メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。
func2ではクラス1のインスタンスから呼び出された場合にクラス1の
m_int1を取得します。
Class Class1{
public:
 int m_int1;
 Class2 m_Class2;
};
Class Class2{
public: void func2();
};
void Class2::func2(){
 /*ここの記述方法が分かりません*/
 /*C1から呼び出されたらC1のm_int1に100を入れる*/
 /*以下間違え*/
 class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/
 C2_1.m_int1 = 100;
}
void main(){
 class1 C1;
 C1.m_int1 = 10;
 C1.m_class2.func();
}
C1.m_class2.func()の中から呼び出したC1にアクセスする方法が
分かりません(TT)。実体がまだあるのだからアクセスする方法は
あると思うのですが・・・
どなたかよろしくお願いします。

お世話になります。C++初心者でうまくコードが書けません(><)
クラス1と2があり、クラス1のメンバにはクラス2があります。
メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。
func2ではクラス1のインスタンスから呼び出された場合にクラス1の
m_int1を取得します。
Class Class1{
public:
 int m_int1;
 Class2 m_Class2;
};
Class Class2{
public: void func2();
};
void Class2::func2(){
 /*ここの記述方法が分かりません*/
 /*C1から呼び出されたらC1のm_int1に...続きを読む

Aベストアンサー

おそらくインスタンスに対する勘違いをされていると思います。

void Class2::func2(){
 /*ここの記述方法が分かりません*/
 /*C1から呼び出されたらC1のm_int1に100を入れる*/
 /*以下間違え*/
 class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/
 C2_1.m_int1 = 100;
}

ここで行っているのは、あくまで func2関数内のローカル変数として宣言されているC2_1のm_int1に100を代入しているだけで、本来行いたい代入先とは別のインスタンスです。

*解決方1
func に class1のインスタンスを特定できる情報を渡す

public:
void func2 (class1 *ptr);
void func2 (class1 &ptr);
など。

*解決法2
class2 のコンストラクタで、自分をメンバ変数として持ってくれるclass1のポインタ等をもらう。

class class2
{
public:
class2 (class1 *ptr)
: m_ptr (ptr)
{
}
void func ()
{
m_ptr->m_int1 = 100;
}
private:
class1 *m_ptr;
}

です。
ちなみに解決法2ではwarningが発生しますが^^;

おそらくインスタンスに対する勘違いをされていると思います。

void Class2::func2(){
 /*ここの記述方法が分かりません*/
 /*C1から呼び出されたらC1のm_int1に100を入れる*/
 /*以下間違え*/
 class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/
 C2_1.m_int1 = 100;
}

ここで行っているのは、あくまで func2関数内のローカル変数として宣言されているC2_1のm_int1に100を代入しているだけで、本来行いたい代入先とは別のインスタンスです。

*解決方1
func に cl...続きを読む

Qメインクラス○○.classが見つからなかったか…

JAVA 初心者です。

簡単な Hello World プログラムを作って実行しましたが、
「エラー: メインクラスHello.classが見つからなかったかロードできませんでした」
と表示されエラーになっています。

>javacc -version
javac 1.7.0_03
>java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

>cd c:\Users\me\Documents\java_test
>javac Hello.java
としてコンパイルは通るのですが、
>java Hello.class
とすると、上記エラーメッセージが表示されます。

システム環境変数には
C:\glassfish3\jdk7\bin
を追加しました。

初歩的なところでつまずいていると思うのですが、ご教示のほどよろしくお願いします。

JAVA 初心者です。

簡単な Hello World プログラムを作って実行しましたが、
「エラー: メインクラスHello.classが見つからなかったかロードできませんでした」
と表示されエラーになっています。

>javacc -version
javac 1.7.0_03
>java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

>cd c:\Users\me\Documents\java_test
>javac Hello.java
としてコンパイルは通るのですが、
>java Hello.class...続きを読む

Aベストアンサー

java Hello.class ではなく
java Hello としてみてください

Helloパッケージのclassクラスを実行しようとしましたが見つかりませんというエラーになってます。

QC#で同じクラスAを継承したクラス1~20に対しての処理をきれいにしたい

C#でClassAを継承したClass1~20があり、
それらに以下のような処理をしているのですが、行数が増えすぎて見難いです。
もっと綺麗に書く方法はないのでしょうか?
class10の処理が「同じ処理」ならClassA型の配列でいけそうなんですが…。
class10だけ配列に入れないか、配列に入れてclass10の部分だけスキップするしか方法はないんでしょうか?
(頭が小文字なのはそのクラスのインスタンスです)
if(class1 != null)
{
  class1.同じ処理
}
if(class2 != null)
{
  class2.同じ処理
}
if(class3 != null)
{
  class3.同じ処理
}
   ・
   ・
   ・
if(class10 != null)
{
  class10.別の処理
}
   ・
   ・
   ・
if(class20 != null)
{
  class20.同じ処理
}

Aベストアンサー

> class10の処理が「同じ処理」ならClassA型の配列でいけそうなんですが…。
なら、メソッドを呼び出す側から見て同じ処理にしてしまえばいいんです。
そのためのメソッドのオーバーライドです。

public ClassA
{
 // ......

 public virtual void someMethod()
 {
  同じ処理
 }
}

Class10 : ClassA
{
 // ......

 public override void someMethod()
 {
  別の処理
 }
}

という具合にして、ClassA型の配列で回して someMethod() を実行しましょう。
someMethod() の引数・戻り値はやりたい処理に合わせて修正してください。

Q【javaコンパイル時のエラーに関して】 「クラスファイルの不正」というエラー

今macでJavaの勉強をしています。

ただ、コンパイル時に下記のようなエラーが出てしまうので、解決方法を教えて下さい!
----------------------------
javac sample.java というコマンドを打つと、
↓↓↓↓↓
sample.java:21: Dodai にアクセスできません。
クラスファイル /Library/Java/Extensions/dodai.jar(Dodai.class) は不正です。
クラスファイルのバージョン 50.0 は不正です。49.0 であるべきです。
削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
Dodai fusen01 = new Dodai();
^
エラー 1 個
----------------------------
というエラーになります。

dodai.jarというのは、本に付いていたサンプルのjarファイルで、
保存場所は
「c:\ProgramFiles\Java\jdk1.6.0_01\jre\lib\ext」と
「c:\ProgramFiles\Java\jre1.6.0_01\lib\ext」に保存するよう書かれてました。
(私のPCがmacなので、/Library/Java/Extensions/に保存してます。)
また、本の解説では「JDK6u1」をインストールするように書かれてました。

エラーの原因はjavaのバージョンが違うのかな?と思い、このサイトを参考にして
javac -J-version というコマンドを打ってみたところ、
----------
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164
----------
というメッセージが流れ、また、
java -version というコマンドも打ってみたところ、上記と同じメッセージが流れました。

これはやはり、サンプルのdodai.jarファイルのバージョンが1.6であるのに、
私のPCのjavaのバージョンが1.5だからエラーが出ているという事でしょうか?(macではデフォルトでjavaが入っているので、そのまま使ってます。)

また、そうである場合、どのようにすれば上記のエラーは解消されるのでしょうか?

教えて下さい!

今macでJavaの勉強をしています。

ただ、コンパイル時に下記のようなエラーが出てしまうので、解決方法を教えて下さい!
----------------------------
javac sample.java というコマンドを打つと、
↓↓↓↓↓
sample.java:21: Dodai にアクセスできません。
クラスファイル /Library/Java/Extensions/dodai.jar(Dodai.class) は不正です。
クラスファイルのバージョン 50.0 は不正です。49.0 であるべきです。
削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
...続きを読む

Aベストアンサー

ご想像の通りバージョン不整合が原因です。
対策としてはJDK6 update1以上をインストールしてください。
コンパイラの方が新しければ問題は起きません。

QC++/CLIでクラス内の要素を相互利用する方法

C++/CLIでクラスの中に定義された構造体等を、複数のクラス間で相互利用したいのですが、そのようなことは可能なのでしょうか。

とりあえず以下のコードを見ていただきたいのですが、

ref class class1;
ref class class2;

ref class class1
{
public:
 enum struct enum1
 {
  aa,bb
 };

 void func1a(class1^ obj){} // 1. OK
 void func2a(class2^ obj){} // 2. OK

 void func1b(class1::enum1 e){} // 3. OK
 void func2b(class2::enum2 e){} // 4. ERROR
};

ref class class2
{
public:
 enum struct enum2
 {
  aa,bb
 };

 void func1a(class1^ obj){} // 5. OK
 void func2a(class2^ obj){} // 6. OK

 void func1b(class1::enum1 e){} // 7. OK
 void func2b(class2::enum2 e){} // 8. OK
};

これの4.がコンパイルエラーになります。
このような構造を定義することはできないのでしょうか。

C++/CLIでクラスの中に定義された構造体等を、複数のクラス間で相互利用したいのですが、そのようなことは可能なのでしょうか。

とりあえず以下のコードを見ていただきたいのですが、

ref class class1;
ref class class2;

ref class class1
{
public:
 enum struct enum1
 {
  aa,bb
 };

 void func1a(class1^ obj){} // 1. OK
 void func2a(class2^ obj){} // 2. OK

 void func1b(class1::enum1 e){} // 3. OK
 void func2b(class2::enum2 e){} // 4. ERROR
};

ref class ...続きを読む

Aベストアンサー

 こんばんは。
 どうやら、無理な様です。
 列挙体をクラスの外に出して一番上に書けば解決ですが、如何してもクラス内に置く事を死守するのであれば、「4」のメンバ関数をテンプレートにして、class2::enum2が見えている所でテンプレートの全特化を行えば出来ます。
 以下参考程度になれば。

// clrconsole.cpp : メイン プロジェクト ファイルです。
#include"stdafx.h"

using namespace System;

ref class class1;
ref class class2;

ref class class1
{
public:
enum struct enum1
{
aa,bb
};

void func1a(class1^ obj){} // 1. OK
void func2a(class2^ obj){} // 2. OK

void func1b(class1::enum1 e){} // 3. OK
template<class _Enum>
void func2b(_Enum e);// 4. 中身を引っこ抜く
};

ref class class2
{
public:
enum struct enum2
{
aa,bb
};

void func1a(class1^ obj){} // 5. OK
void func2a(class2^ obj){} // 6. OK

void func1b(class1::enum1 e){} // 7. OK
void func2b(class2::enum2 e){} // 8. OK
};

// 4. 中身
template<>
void class1::func2b<class2::enum2>(class2::enum2 e)
{
//class2::enum2の時のみ
}

int main(array<System::String ^> ^args)
{
class1^ c = gcnew class1();

c->func2b(class2::enum2::aa);
c->func2b(class2::enum2::bb);

//適合しないenumを入れるとリンクエラーになる
//c->func2b(class1::enum1::aa);
//c->func2b(class1::enum1::bb);

return 0;
}

 こんばんは。
 どうやら、無理な様です。
 列挙体をクラスの外に出して一番上に書けば解決ですが、如何してもクラス内に置く事を死守するのであれば、「4」のメンバ関数をテンプレートにして、class2::enum2が見えている所でテンプレートの全特化を行えば出来ます。
 以下参考程度になれば。

// clrconsole.cpp : メイン プロジェクト ファイルです。
#include"stdafx.h"

using namespace System;

ref class class1;
ref class class2;

ref class class1
{
public:
enum struct enum1
{...続きを読む

QClassファイル → Javaソースプログラム

どーも、こんにちは。プログラミング初心者です。

現在Javaを使ってプログラムをしています。
JavaはJavaソースをコンパイルするとClassファイルが生成されるじゃないですか?
では逆に、ClassファイルからもとのJavaソースプログラムに変換する(?)、取り戻すことはできないのでしょうか???

もしかして無理なのかもしれませんが、これが出来ないとどうしていいか分かりません。
どうしても、ソースプログラムが見たいClassファイルがあるのです。
そんな状態なので困っています。
どなたか少しでもご存知の方は、ご一報ヨロシクお願いします!!

Aベストアンサー

プログラムからソースコードを生成するのを「デコンパイル」といいます。そのためのプログラムを「デコンパイラ」といいます。
 現在は、Jadの他にJodeなどのデコンパイラが出ていますし、Jadの応用ソフトもいろいろあるようです。デコンパイラで検索してみるといろいろと見つかりますよ。

参考URL:http://allabout.co.jp/career/java/closeup/CU20051206B/index.htm

QC,C++,C++/CLIの構造体とクラス

C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが
privateかpublicかという違い「だけ」しか全くないのでしょうか?

クラスにおける
value class / ref class
という分類はC++/CLIのもので
これについては
value class の方は C言語の構造体に近いという事でいいでしょうか?

ref classの方は
ネイティブのC++のクラスを
マネージ用にしたようなもので

C++/CLIの構造体は
C++のそれと同じで
OKですか?

そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?

Aベストアンサー

> ということは、structも継承可、という事でしょうか?

structでも継承可能です。

> 継承のアクセス指定の方は
> クラスと構造体ではどうなるのでしょうか?

class A : Base {};



class A : private Base {};

と等価です。
一方、

struct A : Base {};



struct A : public Base {};

と等価です。

> そして「集成体」というのが初めて知ったのですが
> これはいわゆる、配列や・・・ある条件下でのクラス・・?
> なのでしょうか?

配列と以下の条件をすべて満たすクラスのことです。
・ユーザー定義のコンストラクタを持たない
・非公開または限定公開のメンバを持たない
・基底クラスを持たない
・仮想関数を持たない

ちなみにC言語の集成体は、配列と構造体の総称です(共用体は集成体ではありません)。

QJavaで「class、interfaceまたはenumがありません」というエラー発生しました

コンパイルしたのですが下記のエラーが発生したんですが何が原因ですか。

エラー内容
C:\java>javac Janken_06.java
Janken_06.java:219: エラー: class、interfaceまたはenumがありません
public static void main(String[] args) {
^
エラー1個
回答お願い致します。

Aベストアンサー

ソースコードが無いと何とも。。。
Janken_06.javaの219行目前後と、それに関わる定義部分をチェックしましょう。

QC#クラスについて教えてください

下記通りクラスを作成した場合、プロパティaを配列にできますか?
class Class1
{
public string a { set; get; }
public int b { set; get; }
public int c { set; get; }
}



イメージとしては下記通りにしたいのですが、なかなかうまく行きません。
class Class1
{
public Class1(int x)
{
}
public string a[x] { set; get; }
public int b { set; get; }
public int c { set; get; }
}

private void Form1_Load(object sender, EventArgs e)
{
Class1 f = new Class1(2);
f.a[0] = "asdf";
f.a[1] = "asdfa";
f.a[2] = "asdfasd";
f.b = 1;
f.c = 2;
}
初心者なんで、やさしく教えてください。お願いします。

下記通りクラスを作成した場合、プロパティaを配列にできますか?
class Class1
{
public string a { set; get; }
public int b { set; get; }
public int c { set; get; }
}



イメージとしては下記通りにしたいのですが、なかなかうまく行きません。
class Class1
{
public Class1(int x)
{
}
public string a[x] { set; get; }
public int b { set; get; }
public int c { set; get; }
}

private void Form1_Load(object sender, EventArgs e)
{
Class1 f = new Clas...続きを読む

Aベストアンサー

class Class1
{
 public string[] a { get; set; }

 public Class1(int x)
 {
  a = new string[x+1];
 }
}

こんな感じですか??

Qjava:一括コンパイル後、実行できない(メインクラスXXが見つからない、ロードできない)

Javaを勉強している初心者です。現在「スッキリわかるJava入門 第2版」という本で勉強をしているのですが、第8章のオブジェクト指向でインスタンスを作るクラスファイルとメインクラスファイルを本の通り作成後、コンパイルしたのですが、実行すると
「メインクラスXXXが見つからなかったか、ロードできませんでした」というエラーとなります。原因が全く分かりません。どなたかご教授頂けないでしょうか。

ちなみに作成したjavaファイルは下記の2つになります。
①Main.java
public class Main {
public static void main(String[] args){
Hero h = new Hero();
h.name = "ミナト";
h.hp = 100;
System.out.println("勇者" + h.name + "を生み出しました!");
h.sit(5);
h.slip();
h.sit(25);
h.run();
}
}
②Hero.java
public class Hero{
String name;
int hp;
void attack(){}
void run(){
System.out.println(this.name + "は、" + "逃げ出した!");
System.out.println("GAME OVER");
System.out.println("最終HPは"+ this.hp + "でした。");
}
void sit(int sec){
this.hp += sec;
System.out.println(this.name + "は、" + sec + "秒座った!");
System.out.println("HPが" + sec + "ポイント回復した。");
}
void slip(){
this.hp -= 5;
System.out.println(this.name + "は、" + "転んた!");
System.out.println("5のダメージ!");
}
void sleep(){
this.hp = 100;
System.out.println(this.name + "は、眠って回復した!!");
}
}

これら2つのファイルを同時にコンパイルするとエラー無くClassファイルが作成されますが、それぞれ別にコンパイルすると①のMain.javaのコンパイル時に
「”Hero h = new Hero();」の部分で"シンボルが見つかりません"というエラーになります。
Heroについては②Hero.javaという別ファイルで定義しているからだと思いますが、実行時にエラーが出るのは別々にコンパイルした時にこのようにエラーが出ることが要因なのでしょうか。

ちなみに、①と②のファイルは同じフォルダ内に保存しており、コマンドプロンプトでcdを当フォルダに指定して実行を試みていますが、これが要因なのでしょうか。。

Javaを勉強している初心者です。現在「スッキリわかるJava入門 第2版」という本で勉強をしているのですが、第8章のオブジェクト指向でインスタンスを作るクラスファイルとメインクラスファイルを本の通り作成後、コンパイルしたのですが、実行すると
「メインクラスXXXが見つからなかったか、ロードできませんでした」というエラーとなります。原因が全く分かりません。どなたかご教授頂けないでしょうか。

ちなみに作成したjavaファイルは下記の2つになります。
①Main.java
public class Main {
public...続きを読む

Aベストアンサー

やってみましたが、このソースで
コンパイル、実行は全く問題ないですね。

やり方は以下の通り。
ソースのあるフォルダに cd して。

① コンパイル
javac Main.java
# 参照しているクラスは自動的にコンパイルされます。
② 実行
java Main


人気Q&Aランキング

おすすめ情報