簡體   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