2012-11-03 31 views
1

我在每個線程中有3個線程和1個處理程序。但它只能起作用,其他2個處理程序完全清除textview。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

請不要在將來使用pastebin。只需將您的代碼粘貼到帖子中即可。 –

回答

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

不知道你的意思:/我應該把我的代碼從aboce粘貼到這個'{}'中嗎? Eclipse會帶來很多錯誤:o – Phil

+0

查看我的更新,並閱讀關於多線程 – Yahor10

+0

非常感謝你!但是eclipse在'.submit'上發現錯誤:o並且有一個'{'太多了,我認爲 – Phil