2014-09-02 74 views
1

我有从HTTP下载数据的线程。我使用流API每隔1秒钟获得约10分钟。Java:定期将数据从线程发送到主类

当我从HTTP服务器收到数据后,我需要将此数据发送到MyMainClass中的方法。我怎么能没有静态方法呢?我不喜欢使用静态方法。

public class MyMainClass { 
    public static void main(String[] args) {    
     GetData getData = new GetData(); 
     getData.start();   
    } 

    public static void useText(String text) { 
     System.out.println(text); 
     // do something...   
    } 
} 


public class GetData extends Thread { 

    @Override 
    public void run() { 
     String text; 

     /* Download text from HTTP and save it to "text". 
     * Every 1 seconds to about 10 minutes using stream API. 
     * text= "abc..."; 
     * If there are no errors, run method never exit. 
     */ 
     MyMainClass.useText(text); 

    } 
} 

回答

2

让你的方法的实例方法和创建类的实例可以传递给你的Thread实例

public static void main(String[] args) {    
    GetData getData = new GetData(new MyMainClass()); 
    getData.start();   
} 

public void useText(String text) { 
    System.out.println(text); 
    // do something...   
} 

GetDatarun方法,你就可以使用MyMainClass实例作为回调。

public GetData extends Thread { 
    public GetData(MyMainClass instance) { 
     this.instance = instance; 
    } 

    private MyMainClass instance; 

    @Override 
    public void run() { 
     String text; 

     /* Download text from HTTP and save it to "text". 
     * Every 1 seconds to about 10 minutes using stream API. 
     * text= "abc..."; 
     * If there are no errors, run method never exit. 
     */ 
     instance.useText(text); 
    } 
} 
+0

谢谢,它的工作原理! 但是为什么你在GetData(new MyMainClass())中创建'MyMainClass'的新实例?如果使用'MyMainClass'类的新实例工作,线程如何从启动类(启动线程和主应用程序)使用方法? – martin 2014-09-02 02:50:12

+0

@马丁我不明白你的问题。该方法是一种实例方法。你需要一个实例来调用它。 – 2014-09-02 02:53:56