[英]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.