私は、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
どのようしたら良いのでしょうか、回答よろしくお願いします。
No.2ベストアンサー
- 回答日時:
私はPC上で、通常のjdkのjavacコマンドでコンパイルし、javaコマンドから実行する方法しか知りません。
今は時間がない上に、うろ覚えですが、C#と違ってjavaは1ファイルに1クラスしか定義できなかった気がします。
また、ファイル名とクラス名が一致していなければならなかった気がします。
その辺りを調べてみてはどうでしょうか。
通常のjdkの場合はjarコマンドによって、複数のclassファイル(=コンパイルでできたもの)を統合できた覚えです。
回答してくださってありがとうございます。
調べてみたところ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 を実行すると直すことができました!
ありがとうございます!
No.1
- 回答日時:
念のため。
Infoクラスの定義が、「class Info」ではなく「lass Info」になっているのは、質問時の間違いでソースは正しい?
ただ、エラー内容の下記はそれを示唆しているように見えます。
・file.java:8 → file.javaファイルの8はおそらく行位置
・Didn't find class "Info"
8行目でInfoクラスを使用しようとしているけど、定義がみつからないというエラーに見えます。
回答してくださってありがとうございます。
確認したところ、スマホの方にはcが入っていました。
スマホのソースをきちんとコピペしたつもりが、cが抜けていたのだと思います...
念のためもう一回コンパイルしても同じ表示が出ました。
これはどうしたら良いのでしょうか。教えてください!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaの簡単なソースがコンパイ...
-
IIS環境でJAVAを使用したい
-
eclipseの構文エラーについて
-
Java コンパイル
-
javaが文字コードの影響でコン...
-
Eclipse3.5EEでJavaのコンパイ...
-
C言語について。
-
JSPのエラーメッセージを見る方法
-
「シンボルを見つけられません...
-
importしたパッケージが見つか...
-
同一パッケージ内の継承について
-
コンパイルエラーに出てくる、i...
-
.jarファイルの中身って書き換...
-
サクラエディタでjavaのプログ...
-
Javaのコンパイル結果が表示さ...
-
dokojavaのコンパイルについて
-
コンパイルエラー
-
java サーブレットのサンプルプ...
-
JAVAでC/C++の条件コンパイルの...
-
LaTeXでのアンダーバーの入力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.jarファイルの中身って書き換...
-
IIS環境でJAVAを使用したい
-
javaが文字コードの影響でコン...
-
Eclipse3.5EEでJavaのコンパイ...
-
コンパイルエラーに出てくる、i...
-
サクラエディタでjavaのプログ...
-
Javaのコンパイル結果が表示さ...
-
eclipseの構文エラーについて
-
javax.servlet は存在しません...
-
javaの簡単なソースがコンパイ...
-
「識別子がクラス名でも名前空...
-
eclipseの設定のJREとコンパイ...
-
dokojavaのコンパイルについて
-
逆コンパイルの見方について
-
eclipseについて
-
exlipseでデバックエラーが発生...
-
classファイルを元に戻す
-
java サーブレットのサンプルプ...
-
コンパイルができないのですが...
-
日本語対応 逆コンパイラについて
おすすめ情報
エラーは「dalvikvm -cp file.dex file」をした時に出ました。
そこまでの2つは何もなかったです。
ここではclassのcが抜けていますがスマホにはきちんと入力されています。
指摘していただきありがとうございます。
このソースが合っている場合、どのようにしたら直るのでしょうか。教えてください!