亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在滿足條件之前,如何在 Java 程序中創建連續的 For 循環?

在滿足條件之前,如何在 Java 程序中創建連續的 For 循環?

皈依舞 2022-05-21 17:25:45
我希望在 Java 程序中創建一個連續的增強型 For 循環,以將消息從自動 ping 輸出到文本區域,然后在滿足條件時停止(IP 地址脫機)。我在一個名為“ip”的字符串數組中有 IP 地址。無需循環即可正常工作,但需要不斷迭代,直到沒有檢測到響應。嘗試使用我包含在代碼中的布爾循環 - 但是不會將文本附加到 TextArea 并陷入連續循環。        for (String ip : listOfhosts) {        boolean repeatLoop = true;        try {            InetAddress i = InetAddress.getByName(ip);            textArea.append("Sending Ping Request to " + ip + "\n");            //boolean run = true;            //while (run){            if (i.isReachable(100)) { // 1 second limit                textArea.append("Host is online \n");            } else {                textArea.append("\nHOST IS OFFLINE\n");                //System.exit(0); //If something is offline, system will close. For now.                   try {                    Message message = new MimeMessage(session);                    message.setFrom(new InternetAddress("[email protected]"));                    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));                    message.setSubject("Test Mail");                    message.setText("Test Mail," + "\n Sent From sendMail.java application\n");                    //textArea.append("OK - Online \n");                    Transport.send(message);                    textArea.append("Mail Sent to [email protected] \n host " + ip + " is offline \n");                    return;                } catch (MessagingException e) {                    throw new RuntimeException(e);                }            }                } catch (Exception e) {            textArea.append("Unknown HOST\n");            e.printStackTrace();        }while(repeatLoop);陷入連續循環 - 使程序崩潰。任何幫助都會很棒!
查看完整描述

3 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

此代碼將阻止您的 UI。您應該在單獨的線程中運行它,并在檢查之間添加一些延遲。一個更簡單的解決方案也是使用 Timer


例如,每秒檢查一次:


Timer timer = new Timer();

timer.schedule(new TimerTask() {

    @Override

    public void run() {

        // your code

    }

}, 1000);


查看完整回答
反對 回復 2022-05-21
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

有兩種簡單的方法可以擺脫 Java 中增強的 for 循環。一種是拋出異常,盡管對于正常的流控制,這被認為是異常使用異常。

另一種是使用break;which 將使您擺脫最直接的 for 循環。人們并不總是喜歡return中間函數或break中間 for 循環(或continue就此而言),因為它們的行為有點像 goto/jump 語句并降低代碼的清晰度。另一方面,這正是 break 的目的,因此沒有關于濫用指令的爭論。

另一種方法是使用普通的 while 循環并放棄普通迭代器的增強型 for 循環。在這種情況下,listOfHosts.iterator(), 將允許您計算.hasNext()和的組合isReachable(...)來決定是否繼續循環。


查看完整回答
反對 回復 2022-05-21
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

// suppose listOfhosts is a String Array

List<String> srcHostList = new ArrayList<String>();

srcHostList.addAll(Arrays.asList(listOfhosts));


List<String> offlineList = new ArrayList<String>();


while( srcHostList.size() > 0) {

    offlineList.clear(); 

    for(String ip: srcHostList) {

       boolean isOnline = true;

       try{

         // TODO check online

       }catch(Exception ex){

         // TODO handle exception

         isOnline = false;

       }

       if(!isOnline) offlineList.add(ip);

    }

    srcHostList.removeAll(offlineList);

}


查看完整回答
反對 回復 2022-05-21
  • 3 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號