Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

インスタンス化のコンパイルエラー

エクリプスで実行できるのを確認して、コンパイルしてテストしてみようと思ったら

src\animation\Animation.java:24: エラー: クラス Characterのコンストラクタ Characterは指定された型に適用できません。
        Character cha=new Character();
                      ^
  期待値: char
  検出値: 引数がありません
  理由: 実引数リストと仮引数リストの長さが異なります
src\animation\Animation.java:105: エラー: シンボルを見つけられません
                        slimeAni=cha.Characters(ac);
                                    ^
  シンボル:   メソッド Characters(AudioClip)
  場所: タイプCharacterの変数 cha
src\animation\Animation.java:108: エラー: シンボルを見つけられません
                        marioxy=cha.mario(left,right,up,down,t);
                                   ^
  シンボル:   メソッド mario(boolean,boolean,boolean,boolean,int)
  場所: タイプCharacterの変数 cha
エラー3個


とエラーをいわれました。この1コ目のエラーがなぜでるのかわかりません。
調べると、そのまま引数が違うだとか名前を間違ってると書かれていましたが、Charを引数にはどこにも使っていませんし、名前のミスもないと思います。2,3個目は多分1個目のエラーを直したら消えると思うのですが。。
プログラムは

Animation.java(必要そうな部分。必要なら全文載せます。)
public class Animation extends Applet implements Runnable,KeyListener{

    Thread thread=null;    //スレッドを作る
    Dimension size;        //ダブルバッファの準備
    Image back;
    Graphics buffer;
    
    Character cha=new Character();
    
    boolean left,right,up,down;

    Image slime,dirt,grassDirt,mario;
    String presskey="";
    int key;
    int marioxy[]=new int[4];
    int x=800,y=470,slimeAni=0;
    
    AudioClip ac;

    public void run() {
        int t=0;
        while(true){
            if(t%4==0){
            slimeAni=cha.Characters(ac);
            x-=5;
            }
            marioxy=cha.mario(left,right,up,down,t);
            key=0;
            
        try{            //作業を0.05秒停止させる
            Thread.sleep(50);
            t++;
        }catch(InterruptedException e){

        }
        repaint();
        }
    }
}



Character.java(全文)
package animation;

import java.applet.AudioClip;

public class Character{
    
    int mario[]=new int[4];
    int a=0,jumpy=10;
    boolean bigger=false,jumpFlag=false;

    public int Characters(AudioClip ac){
        if(a==2){
            a--;
            bigger=false;
        }else if(a==0){
            a++;
            bigger=true;
        }else if(a==1&&bigger){
            a++;
        }else if(a==1&&!bigger){
            a--;
            ac.play();
        }
    return a;        
    }

    public int[] mario(boolean leht,boolean right,boolean up,boolean down,int t) {
        if(up){
            jumpFlag=true;
        }
        if(jumpFlag){
            if(t%2==0){
                mario[3]-=jumpy;
                if(jumpFlag){
                    jumpy--;
                }
                if(jumpy==-11){
                    jumpFlag=false;
                    jumpy=10;
                }
            }
        }
        if(right){//プレーヤーが操作するとき用
            mario[1]=0;
            mario[2]+=10;
            if(mario[0]==0){
                mario[0]++;
            }else{
                mario[0]--;
            }
        }if (leht){
            mario[2]-=10;
            mario[1]=1;
            if(mario[0]==0){
                mario[0]++;
            }else{
                mario[0]--;
            }    
        }
    return mario;
    }
}

どなたかエラーの原因がわかる方はいますか?

9

回答

436

閲覧

9件の回答

評価

0

lava.lang.Character

評価

0

Characterというコンストラクタ?がもともと別にあったんですね。

クラス名をCharaMove.javaに変えてコンパイルすると
src\animation\Animation.java:24: エラー: シンボルを見つけられません
        CharaMove cha=new CharaMove();
        ^
  シンボル:   クラス CharaMove
  場所: クラス Animation
src\animation\Animation.java:24: エラー: シンボルを見つけられません
        CharaMove cha=new CharaMove();
                                       ^
  シンボル:   クラス CharaMove
  場所: クラス Animation
エラー2個

となります。。調べるとCLASSPATHを指定するなどでてきますが、appletviewerだとサポートされてないオプションです。と言われるので使えません。。。Animation.javaと同じところに置いてもダメでした。

ファイルの構成は
Animation┐
     src
     ├Animation.java(appletviewerで開くファイル)
     animation
               ├Animation.class、CharaMove.java、CharaMove.class

となっています。

評価

0

>Characterというコンストラクタ?がもともと別にあったんですね。
Characterという「クラス」がもともと別にあって、そちらが優先されている。

>調べるとCLASSPATHを指定するなどでてきますが、appletviewerだとサポートされてないオプションです。と言われるので使えません
できないことはないが、ふつうアプレットでclasspathを指定することはない。

>src\animation\Animation.java:24: エラー: シンボルを見つけられません
ここではAnimation.javaはanimationフォルダに入っているといっているのに、下のファイル構成では入っていない。
CharaMove.javaはanimationの下にいるし、どうなっているのだろう。
説明できないならコマンドプロンプトで dir /S でもいいが。

animationはpackageなんだろうか…?

評価

0

解答ありがとうございます!
animationはパッケージ名です。

dir /s としたところ
 C:\Users\名前\OneDrive\プログラム\JavaApplet\Animation\src のディレクトリ

2017/07/23  21:08    <DIR>          .
2017/07/23  21:08    <DIR>          ..
2017/07/23  21:07    <DIR>          animation
2017/07/22  15:15             3,351 Animation.java
2017/07/20  21:59    <DIR>          img
2017/07/19  23:08    <DIR>          sounds
2017/07/19  00:22               129 Web.html
               2 個のファイル               3,480 バイト

 C:\Users\名前\OneDrive\プログラム\JavaApplet\Animation\src\animation のディレクトリ

2017/07/23  21:07    <DIR>          .
2017/07/23  21:07    <DIR>          ..
2017/07/19  23:09             3,487 Animation.class
2017/07/22  15:15             3,351 Animation.java
2017/07/22  14:38             1,030 CharaMove.class
2017/07/22  14:36             1,002 CharaMove.java
               4 個のファイル               8,870 バイト

 C:\Users\名前\OneDrive\プログラム\JavaApplet\Animation\src\img のディレクトリ

2017/07/20  21:59    <DIR>          .
2017/07/20  21:59    <DIR>          ..
2017/07/16  14:06             1,632 char_m_sl_g.png
2014/06/25  09:04               266 dirt.png
2014/06/25  09:04               408 grass_side.png
2017/07/20  21:55             1,047 mario.png
               4 個のファイル               3,353 バイト

 C:\Users\名前\OneDrive\プログラム\JavaApplet\Animation\src\sounds のディレクトリ

2017/07/19  23:08    <DIR>          .
2017/07/19  23:08    <DIR>          ..
2017/07/19  22:29            70,606 SlimeMove.wav
               1 個のファイル              70,606 バイト

とでてきました。

パッチファイルでコンパイルしているのですが、内容は

javac -encoding utf-8 src/animation/Animation.java
copy src\animation\Animation.java src\
appletviewer src/Animation.java
pause

としています。
javac -encoding utf-8 src/animation/Animation.javaを、Animation.javaをコピペしてから
javac -encoding utf-8 src/Animation.javaを試しましたが、同様のエラーがでてきました。

評価

0

packageとフォルダ名、コンパイルや実行時のフォルダとの関係は理解しているか?

評価

0

調べてみたのですが、よくわかりませんでした。。。

評価

0

あやふやな知識のまま進んでしまうと、こういうことになる。

>調べてみたのですが、よくわかりませんでした。。。

などと曖昧なことを書かずに、例えば何を検索してどこのページを読んで…ということを書かないと、丸投げにしかならない。

評価

0

サイトを読み漁ってたら、答えがありました。
コンパイルするときにAnimation.javaだけでなく全てを同時にコンパイルしなければならないのですね。
一度
javac -encoding utf-8 src/animation/Animation.java
javac -encoding utf-8 src/animation/CharaMove.java
としてエラーがでたので関係ないと思っていたのですが。。。
javac -encoding utf-8 src/animation/*.java
という書き方があるのですね。

評価

0

>コンパイルするときにAnimation.javaだけでなく全てを同時にコンパイルしなければならないのですね。
いや、そんなことはない。
コンパイルは「使われる側」⇒「使う側」の順に行う。
AからBを使う場合、AのコンパイルにはB.classを必要とする
BのコンパイルにA.classは必要ない

AとBが相互に使われているようなものは、「作り方が悪い」ということだ。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名