繁体   English   中英

Thread.start()不初始化run()

[英]Thread.start() doesn't initialize run()

我的代码有问题。 由于某种原因,我的thread.start()无法激活我的run()方法。 在纯粹的绝望中,我只是用打印函数替换了run()中的代码,但是什么也没打印。 有人可以通过解释代码中的错误来帮助我吗?

public class Screen extends JPanel implements Runnable{
    Thread thread = new Thread();

    Frame frame;

    public Screen(Frame frame){
        this.frame = frame;
        frame.setSize(horizontal * 25 + 24 , (vertical) * 25 + 48);
        this.frame.addKeyListener(new KeyHandler(this));
        thread.start();
    }
    public void run(){
        System.out.println("Boom");
    }
}

在这段代码之间以及在这段代码下,我都有很多东西,但这是线程和框架必不可少的部分。

您必须将Thread传递给Runnable 由于thread是一个实例变量,并且该类实现了Runnable我想您想这样做:

Thread thread = new Thread(this);

但是,从构造函数调用可重写方法时要小心,如果由在构造函数初始化时并行运行代码的单独线程调用这些方法,则要格外小心。 它可能在构造函数仍在初始化对象时运行。 想想如果您继承Screen子类,重写run方法,并且run方法在初始化时访问超类Screen属性,将会发生什么情况。

另请参阅构造函数中的可重写方法调用出了什么问题?

这是因为您的线程不知道run方法。 您可以通过更改

Thread thread = new Thread();

Thread thread = new Thread(this);

因为您的类是Runnable的实例。

ps尽量避免弄乱线程和Swing。 如果确实需要,请使用SwingWorkers。

线程需要一个Runnable实例,该实例具有run()方法来调用。 但是您没有向Thread提供Runnable实例。

Thread t = new Thread(this);

您正在创建一个简单的线程。

Thread thread = new Thread();

它会调用run()方法,但会调用Thread类,而不是Screen类的可运行实现。

你可以做

Thread thread = new Thread(new Screen());

您有两种解决方案:
1)在您的课程中使用替代run方法

Thread thread = new Thread(this);

2)使用new Runnable

Thread th = new Thread(new Runnable() {

        @Override
        public void run() {
            // your code

        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM