-1

これは runnable を実装するための簡単なプログラムです。私は取得しています

import java.util.*;


class NewThread implements Runnable{
    Thread t;

    NewThread(){
        t = new Thread(this, "Demo Thread");
        System.out.println("Child Thread "+t);
        t.start();
    }
}

public void run(){
    try{
        for(int i=5;i>0;i--){
            System.out.println("Child Thread:"+i);
            Thread.sleep(1000);
        }
    } catch(InterruptedException e){
        System.out.println("Child Interrupted");
    }

    System.out.println("Child Thread Exiting\n");
}


public class ThreadDemo{
    public static void main(String[] args) {
        thread curr = thread.currentThread();
        System.out.println("Current Thread"+curr);  
        new NewThread();

        try{
            for(int i=0;i>5;i--){
                System.out.println("Parent Thread"+i);
                Thread.sleep(1000);
            }
        } catch(InterruptedException e){
            System.out.println("Main thread interrupted");
        }
        System.out.println("Main Thread Exiting");      
    }
}

コンパイル中にこれらのエラーが発生します

ThreadDemo.java:14: クラス、インターフェース、または列挙型が必要です

  public void run(){
   ^

ThreadDemo.java:16: クラス、インターフェース、または列挙型が必要です

  for(int i=5;i>0;i--){
              ^

ThreadDemo.java:16: クラス、インターフェイス、または列挙型が必要です (int i=5;i>0;i--){ ^

ThreadDemo.java:18: クラス、インターフェース、または列挙型が必要です

      Thread.sleep(1000);             ^

ThreadDemo.java:19: クラス、インターフェース、または列挙型が必要です } ^

ThreadDemo.java:22: クラス、インターフェース、または列挙型が必要です } ^

ThreadDemo.java:25: クラス、インターフェイス、または列挙型が必要です

}

4

5 に答える 5

1

runメソッドを含める前に、クラスの定義を閉じました。ここをチェックしてください:

class NewThread implements Runnable{
    Thread t;

    NewThread(){
        t = new Thread(this, "Demo Thread");
        System.out.println("Child Thread "+t);
        t.start();
    }
} // <-- remove this
public void run() {
    //implementation...
}
//<-- add the } here
//rest of your code...

他の人が指摘する悪名高いエラーは別として、あなたのデザインはかなり奇妙です。は別の によって実行されるため、 にはそのジョブを実行するための単一のをRunnable含めることはできません。これは、スレッドの現在の設計 (または動作方法) の概要です。ThreadRunnableThread

Main thread
    |
    | ---->   new NewThread(pass the Runnable)
    |              |
    |              |
    |              |
    |              |  ----------------------->  new Thread().start()
    |              |                                     |
    |              |                                     |
    .              .                                     .
    .              .                                     .
    .              .                                     .

コードは次のようになります。

import java.util.*;

class NewThread implements Runnable{
    //a Runnable shouldn't have another thread
    NewThread() {
    }
}

public void run(){
    for (int i=5;i>0;i--) {
        System.out.println("Child Thread:"+i);
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            //interrupted exception will somewhat wake the thread up
            //so it must handle the Thread#sleep method only.
            System.out.println("Child Interrupted");
        }
    }
    System.out.println("Child Thread Exiting");
}

public class ThreadDemo{
    public static void main(String[] args) {
        thread curr = thread.currentThread();
        System.out.println("Current Thread"+curr);
        //pass the runnable to a thread and start the thread
        new Thread(new NewThread()).start();
        for (int i=0;i>5;i--) {
            System.out.println("Parent Thread"+i);
            try {
                Thread.sleep(1000);
            } catch(InterruptedException e){
                System.out.println("Main thread interrupted");
            }
        }
        System.out.println("Main Thread Exiting");      
    }
}
于 2013-09-23T14:13:09.757 に答える
1

run()メソッドをNewThreadクラス内に配置する必要があります

于 2013-09-23T14:13:34.383 に答える
0

あなたのrunメソッドはクラス外です

于 2013-09-23T14:13:33.680 に答える
0
class NewThread implements Runnable{
    Thread t;

    NewThread(){
        t = new Thread(this, "Demo Thread");
        System.out.println("Child Thread "+t);
        t.start();
    }
// modify remove this }     
//}

    public void run(){
        try{
            for(int i=5;i>0;i--){
                System.out.println("Child Thread:"+i);
                Thread.sleep(1000);
            }
        } catch(InterruptedException e){
            System.out.println("Child Interrupted");
        }

        System.out.println("Child Thread Exiting\n");
    }
// modify add this }    
}

public class ThreadDemo{
    public static void main(String[] args) {
        //modify thread curr = thread.currentThread();
        Thread curr = Thread.currentThread();
        System.out.println("Current Thread"+curr);  
        new NewThread();

        try{
            for(int i=0;i>5;i--){
                System.out.println("Parent Thread"+i);
                Thread.sleep(1000);
            }
        } catch(InterruptedException e){
            System.out.println("Main thread interrupted");
        }
        System.out.println("Main Thread Exiting");      
    }
}
于 2013-09-23T14:22:36.997 に答える
0

メソッドはクラスに含める必要があります。run メソッドの前に終了ブレース '}' を置きました。

于 2013-09-23T14:14:13.997 に答える