0
package ThreadExample;

/**
 *
 * @author Administrator
 */


public class SynThread {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Share s=new Share();
        MyThread m1=new MyThread(s,"Thread1");
        MyThread m2=new MyThread(s,"Thread2");
        MyThread m3=new MyThread(s,"Thread3");

        // TODO code application logic here
    }

}


class MyThread extends Thread{
    Share s;
    MyThread(Share s,String str){
        super(str);
        this.s=s;
        start();
    }
    public void run(){
        s.doword(Thread.currentThread().getName());
    }
}




class Share{
    public synchronized void doword(String str){
        for(int i=0;i<5;i++){
        System.out.println("Started   :"+str);
        try{
            Thread.sleep(100);
        }catch(Exception e){}
            }
    }
}

/*出力

スレッド"main"の例外java.lang.VerifyError:(class:ThreadExample / Share、method:signature:()V)コンストラクターはThreadExample.SynThread.main(SynThread.java:18)でsuper()またはthis()を呼び出す必要があります* /

4

1 に答える 1

0

古いバージョンのコードを実行しているようです。もしかしたら、あなたのクラスのいくつかは前回コンパイルされなかったのでしょうか? すべてを再コンパイルしてみてください。

FWIW、エラーは、クラスコンストラクターがスーパーコンストラクターを呼び出さないと不平を言うJVMです。コンパイラも同じことをチェックするため、実行時にこれが発生することはありません (通常、クラス ファイルはまったく生成されません)。

于 2013-01-07T07:22:28.567 に答える