2012-11-03 5 views
1

У меня есть 3 потока и 1 обработчик в каждой теме. Но он работает только один, остальные 2 обработчика полностью очищают текст.3 Темы + 3 Обработчики не работают

Код:

Thread getServerStatus = new Thread() {      
     public void run() {                   
      Document doc; 
      try { 
       doc = dereference("my url"); 
       String text = doc.select("div#serverstatus").toString(); 
       Message msg = handler_serverstatus.obtainMessage(); 
       msg.obj = text; 
       handler_serverstatus.sendMessage(msg); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

     Handler handler_serverstatus = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       String text = (String)msg.obj; 
       TextView tv = (TextView)findViewById(R.id.server_status); 
       if(text.contains("online")) { 
        //tv.setTextColor(2); 
        tv.setText("online"); 
       } else if(text.contains("offline")) { 
        tv.setText("offline"); 
       } else { 
        tv.setText("Error #1"); 
       } 
      } 

     }; 
    }; 

    Thread getPlayersOnline = new Thread() {      
     public void run() {                   
      Document doc; 
      try { 
       doc = dereference("my url"); 
       String text = doc.select("div#players_on").toString(); 
       Message msg = handler_players.obtainMessage(); 
       msg.obj = text; 
       handler_players.sendMessage(msg); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

     Handler handler_players = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       String text = (String)msg.obj; 
       TextView tv = (TextView)findViewById(R.id.players_online); 
       text = text.replace("<div id=\"players_on\">", ""); 
       text = text.replace("</div>", ""); 
       tv.setText(text); 
      } 

     }; 
    }; 

    Thread getPlayersMax = new Thread() {      
     public void run() {                   
      Document doc; 
      try { 
       doc = dereference("url"); 
       String text = doc.select("div#players_max").toString(); 
       Message msg = handler_players_max.obtainMessage(); 
       msg.obj = text; 
       handler_players_max.sendMessage(msg); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

     Handler handler_players_max = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       String text = (String)msg.obj; 
       TextView tv = (TextView)findViewById(R.id.players_max); 
       text = text.replace("<div id=\"players_max\">", ""); 
       text = text.replace("</div>", ""); 
       tv.setText(text); 
      } 

     }; 
    }; 

    public void ButtonClick(View view) throws IOException { 
     getServerStatus.start(); 
     getPlayersOnline.start(); 
     getPlayersMax.start(); 
    } 

    private Document dereference(String uri) throws IOException { 
     Connection connection = Jsoup.connect(uri); 
     return connection.get(); 
    } 

Это может быть совершенно неправильно?

+0

Пожалуйста, не используйте пастебин в будущем. Просто вставьте свой код в сообщение. –

ответ

1

Применение

ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(1); // number of working thread 
Runnable getServerStatus = new Runnable() { 
     @Override 
     public void run() { 
      Document doc; 
       try { 
        doc = dereference("my url"); 
        String text = doc.select("div#serverstatus").toString(); 
        Message msg = handler_serverstatus.obtainMessage(); 
        msg.obj = text; 
        handler_serverstatus.sendMessage(msg); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
     } 

      Handler handler_serverstatus = new Handler() 
      { 
       public void handleMessage(Message msg) 
       { 
        String text = (String)msg.obj; 
        TextView tv = (TextView)findViewById(R.id.server_status); 
        if(text.contains("online")) { 
         //tv.setTextColor(2); 
         tv.setText("online"); 
        } else if(text.contains("offline")) { 
         tv.setText("offline"); 
        } else { 
         tv.setText("Error #1"); 
        } 
       } 

      }; 


    }; 
    Runnable getPlayersOnline = new Runnable() { 
     @Override 
     public void run() {                   
       Document doc; 
       try { 
        doc = dereference("my url"); 
        String text = doc.select("div#players_on").toString(); 
        Message msg = handler_players.obtainMessage(); 
        msg.obj = text; 
        handler_players.sendMessage(msg); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 

      Handler handler_players = new Handler() 
      { 
       public void handleMessage(Message msg) 
       { 
        String text = (String)msg.obj; 
        TextView tv = (TextView)findViewById(R.id.players_online); 
        text = text.replace("<div id=\"players_on\">", ""); 
        text = text.replace("</div>", ""); 
        tv.setText(text); 
       } 

      }; 
    } 

    Runnable getPlayersMax = new Runnable() { 

      public void run() {                   
       Document doc; 
       try { 
        doc = dereference("url"); 
        String text = doc.select("div#players_max").toString(); 
        Message msg = handler_players_max.obtainMessage(); 
        msg.obj = text; 
        handler_players_max.sendMessage(msg); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 

      Handler handler_players_max = new Handler() 
      { 
       public void handleMessage(Message msg) 
       { 
        String text = (String)msg.obj; 
        TextView tv = (TextView)findViewById(R.id.players_max); 
        text = text.replace("<div id=\"players_max\">", ""); 
        text = text.replace("</div>", ""); 
        tv.setText(text); 
       } 

      }; 
    }; 
    newFixedThreadPool.submit(getServerStatus); 
    newFixedThreadPool.submit(getPlayersOnline); 
    newFixedThreadPool.submit(getPlayersMax); // submit all your targets 
} 

public void ButtonClick(View view) throws IOException { 
     newFixedThreadPool.shutdown();// shutdown and execute it 
    } 

с 3 работоспособными внутри; Прочтите учебное пособие по ThreadPools http://www.vogella.com/articles/JavaConcurrency/article.html, http://www.caveofprogramming.com/java/java-multithreading-thread-pools-video-tutorial-part/

или оберните цели run() синхронизированным блоком {};

+0

Не знаю, что означает u:/Должен ли я вставлять свой код из aboce в этот '{}'? Eclipse приносит много ошибок: o – Phil

+0

Просмотреть мои обновления и прочитать о многопоточности – Yahor10

+0

большое спасибо вам! но eclipse говорит об ошибке в '.submit': o и было' '' слишком много, я думаю, – Phil

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

  • Нет связанных вопросов^_^