2014-09-02 1 views
1

У меня есть поток, который загружает данные из HTTP. Я получаю его от 1 секунды до 10 минут, используя stream API.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...   
} 

В GetData класса run метод, вы можете использовать экземпляр 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

Спасибо, это работает! Но почему вы создаете новый экземпляр 'MyMainClass' в' GetData (новый MyMainClass()); '? Как использовать метод использования потока из класса запуска (который запускает поток и основное приложение) при работе с новым экземпляром класса MyMainClass? – martin

+0

@martin Я не понимаю ваш вопрос. Метод является методом экземпляра. Вам нужен экземпляр, чтобы вызвать его. –

Смежные вопросы