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();
    }
}

我正在尝试学习线程,这是我所学过的最难的事情之一。OOP 与这个 xD 无关

4

3 回答 3

2

您以错误的方式执行此操作,当您调用client.start();它时,它将调用Client类中的 start 函数,并在该函数中创建一个线程类的新实例,该实例的默认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 回答