プロが教える店舗&オフィスのセキュリティ対策術

私は、javaを始めてすぐなのですが、コンパイルしようとしたら次のようなエラーが出て全然直らないので困っています。何がいけないのでしょうか、また何をしたらいいのでしょうか。お答えしてくださると嬉しいです。

環境:アンドロイドにtermuxをインストールし、
ecjとdxのパッケージをダウンロードしてコンパイルしました。

ソースコード
lass Info {
String name;
int age;
}

public class file{
public static void main(String[] args){
Info[] info = new Info[3];

for(int i=0;i<info.length;i++) {
info[i] = new Info();
}

info[0].name = "Taro Yamada";
info[0].age = 30;

info[1].name = "Hanako Sato";
info[1].age = 20;

info[2].name = "Ichiro Yamamoto";
info[2].age = 120;

for(int i=0;i<info.length;i++) {
System.out.printf("%s, %d%n",info[i].name, info[i].age);
}
}
}


コンパイルしたコマンド
$ ecj file.java
$ dx --dex --output=file.dex file.class
$ dalvikvm -cp file.dex file

エラー文
Exception in thread "main" java.lang.NoClassDefFoundError: Failed resolution of: [LInfo;
at file.main(file.java:8)
Caused by: java.lang.ClassNotFoundException: Didn't find class "Info" on path: DexPathList[[dex file "file.dex"],nativeLibraryDirectories=[/system/lib64, /product/lib64, /system/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 1 more

どのようしたら良いのでしょうか、回答よろしくお願いします。

質問者からの補足コメント

  • エラーは「dalvikvm -cp file.dex file」をした時に出ました。
    そこまでの2つは何もなかったです。

      補足日時:2019/06/27 22:38
  • ここではclassのcが抜けていますがスマホにはきちんと入力されています。
    指摘していただきありがとうございます。
    このソースが合っている場合、どのようにしたら直るのでしょうか。教えてください!

      補足日時:2019/06/28 07:01

A 回答 (2件)

私はPC上で、通常のjdkのjavacコマンドでコンパイルし、javaコマンドから実行する方法しか知りません。


今は時間がない上に、うろ覚えですが、C#と違ってjavaは1ファイルに1クラスしか定義できなかった気がします。
また、ファイル名とクラス名が一致していなければならなかった気がします。
その辺りを調べてみてはどうでしょうか。
通常のjdkの場合はjarコマンドによって、複数のclassファイル(=コンパイルでできたもの)を統合できた覚えです。
    • good
    • 0
この回答へのお礼

回答してくださってありがとうございます。
調べてみたところpublic class 〜は同じjavaファイルに2つ以上作れなくて、
class 〜なら作ることができるようです。
それを調べて気づいたのですが、$ ecj file.javaをした時、file.class以外にも、Info.classが作成されていたようです。
なので、
$ dx --dex --output=file.dex file.class Info.class のように、Info.classも指定して
$ dalvikvm -cp file.dex file を実行すると直すことができました!
ありがとうございます!

お礼日時:2019/06/28 18:07

念のため。


Infoクラスの定義が、「class Info」ではなく「lass Info」になっているのは、質問時の間違いでソースは正しい?
ただ、エラー内容の下記はそれを示唆しているように見えます。
・file.java:8 → file.javaファイルの8はおそらく行位置
・Didn't find class "Info"
8行目でInfoクラスを使用しようとしているけど、定義がみつからないというエラーに見えます。
    • good
    • 0
この回答へのお礼

うーん・・・

回答してくださってありがとうございます。
確認したところ、スマホの方にはcが入っていました。
スマホのソースをきちんとコピペしたつもりが、cが抜けていたのだと思います...
念のためもう一回コンパイルしても同じ表示が出ました。
これはどうしたら良いのでしょうか。教えてください!

お礼日時:2019/06/28 06:24

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