1

このプログラムが機能しないのはなぜですか?(「実行中...」は出力されません)

package eu.inmensia.learn;

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class Client extends Canvas implements Runnable {

    private static final long serialVersionUID = 1L;
    public static final int WIDTH = 300;
    public static final int HEIGHT = WIDTH / 16 * 9;
    public static final short SCALE = 3;

    private Thread thread;
    private JFrame frame = new JFrame();
    private boolean running = false;

    public Client() {
        Dimension size = new Dimension(WIDTH * SCALE, HEIGHT * SCALE);
        setPreferredSize(size);
    }

    public synchronized void start() {
        running = true;
        thread = new Thread("display");
        thread.start(); // start the thread
    }

    public synchronized void stop() {
        running = false;
        try{
            thread.join(); // end the thread
        }catch(InterruptedException e){ e.printStackTrace(); }
    }

    public void run() {
        while(running){
            System.out.println("Running...");
        }
    }

    public static void main(String[] args) {
        Client client = new Client();
        client.frame.setResizeable(false);
        client.frame.setTitle("Program test");
        client.frame.add(client);
        client.frame.pack();
        client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        client.frame.setLocationRelativeTo(null);
        client.frame.setVisible(true);

        client.start();
    }
}

私はスレッドを学ぼうとしていますが、これは私が今までに学んだ中で最も難しいことではないにしても、その1つです。OOPはこのxDには何もありません

4

3 に答える 3

2

これを間違った方法で行うclient.start();と、クラスでstart関数が呼び出され、その関数で、デフォルトのメソッドが空Clientであるスレッドクラスの新しいインスタンスが作成されます。run

あなたはこのコードを意味するかもしれません:

public synchronized void start() {
    running = true;
    thread = new Thread(this);
    thread.start(); // start the thread
}

これがお役に立てば幸いです

于 2012-11-24T22:27:53.993 に答える
1

このため

new Thread("display");

に変更します

new Thread(this)

私はあなたがあなたがしていることを知っていることを願っています。

于 2012-11-24T22:24:39.680 に答える
0

汎用(BLANK読み取り)スレッドオブジェクトを作成しました。クラスをパラメータとして渡す必要があります。

thread = new Thread(this);

これにより、runメソッドがThreadオブジェクトにバインドされます。通常、スレッドの名前はそれほど重要ではありません。この例を参照してください

于 2012-11-24T22:26:33.833 に答える