11

我对一个奇怪的问题感到困惑。基本上情况是这样的。我在我的类中实现了runnable,我在一个新线程中传递了这个类,我在run()实现runnable的类中覆盖了我的方法,然后我启动了线程。但是,我的start()方法从不调用我的run()方法。我搜索了论坛,但似乎找不到另一个类似的问题。

下面是我的示例代码:

public class EmailManager implements Runnable {
    PortalManagementSBLocal pmbr= this.lookupPortalManagementSB();
    Thread runner;
    String emailServerName = "";
    String smtpPort = "";
    String emailTo = "";
    String emailFrom = "";
    String mailer = "JavaMailer";
    String subject = "";
    String message = "";

    public EmailManager() {
    }//default constructor

    public EmailManager(String emailTo, String subject, String message){

        this.emailTo=emailTo;
        this.subject = subject;
        this.message = message;
        //need to make this dynamic
        this.emailFrom = pmbr.getEmailFrom();
        this.emailServerName = pmbr.getEmailServerName();
        this.smtpPort = pmbr.getEmailSMTPPort();
        //runner = new Thread(this,"Email");
        runner = new Thread(this);
        runner.start();
        System.out.println("***** Email Thread running...");


    }

    @Override
    public void run(){
        sendEmail(); //This is never called
    }

非常感谢任何指导!万分感谢!

4

5 回答 5

8

你怎么知道这个方法永远不会被调用?

下面的简单测试有效。所以创建一个线程并从构造函数中运行它是没有问题的。因此,还有其他事情正在阻止您看到sendEmail()正在调用的内容。

public class Test implements Runnable {
  Thread runner;
  public Test() {
    this.runner = new Thread(this);
    this.runner.start();
  }

  @Override
  public void run() {
    System.out.println("ya");   
  }

  public static void main(String[] args) {
    new Test();
  }
}
于 2012-06-20T12:13:44.863 回答
3

我认为,问题在于您在构造函数调用完成之前传递了它。这可能会对您有所帮助: https ://stackoverflow.com/a/5623327/1441485

于 2012-06-20T12:09:13.520 回答
1

不要runner = new Thread(this);在构造函数中使用

移动 ”runner = new Thread(this); runner.start();

初始化函数,使用 new 创建实例并调用这个 init()

于 2012-06-20T12:10:33.593 回答
1
runner = new Thread(this);
        runner.start();

在构造函数返回之前,您的this对象未正确初始化。所以把它移到我们的某个地方,可能是你产生这个新线程的地方。

于 2012-06-20T12:25:06.677 回答
-2

将其移出构造函数。可以说构造函数内部没有“this”。

于 2012-06-20T12:14:15.643 回答