一段测试网络是否连通的代码

这是一个Java程序,实现了在网络连接断开时检测并发出提醒的功能。代码创建了一个线程,通过尝试从预设的URL(如百度和谷歌)获取HTML代码来判断网络状态。当网络中断时,程序会等待指定时间后再次检查网络状态。

package com.sict;

import java.awt.Toolkit;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/** *//**
 * @Description:本类开启一个线程检测网络是否连通
 * @Author : 惠万鹏
 * @Time :2008-1-10
 */
public class NetworkManagement implements Runnable {
    private int htmlCodeSize;
    private int sleepMillisecond;
    private int sleepMillisecondWhenNetWorkUnLinked;
    private boolean isSpontaneousNotice;
    private static boolean networkIsLinked;
    private Thread thread = new Thread(this);
    private Toolkit toolkit;
    private String[] urls;

    public NetworkManagement() {
        this.urls = new String[]{"http://www.baidu.com", "http://www.google.cn"};
        this.htmlCodeSize = 50;
        this.sleepMillisecond = 5000;
        this.sleepMillisecondWhenNetWorkUnLinked = 10000;
        this.toolkit = Toolkit.getDefaultToolkit();
        thread.start();
    }
    public void setURLs(String[] urls) {
        if (urls != null && urls.length > 0) {
            this.urls = urls;
        }
    }
    public void setHtmlCodeSize(int htmlCodeSize) {
        if (htmlCodeSize > 0) {
            this.htmlCodeSize = htmlCodeSize;
        }
    }
    public void isSpontaneousNotice(boolean isSpontaneousNotice) {
        this.isSpontaneousNotice = isSpontaneousNotice;
    }
    public void setSleepMillisecont(int sleepMillisecont) {
        if (sleepMillisecont > 100) {
            this.sleepMillisecond = sleepMillisecont;
        }
    }
    public void setSleepMillisecondWhenNetWorkUnLinked(int sleepMillisecont) {
        if (sleepMillisecont > 100) {
            this.sleepMillisecondWhenNetWorkUnLinked = sleepMillisecont;
        }
    }
    public static boolean IsNetWordLinking() {
        return NetworkManagement.networkIsLinked;
    }

    public void run() {
        while (true) {
            try {
                this.isNetWorkLinked();
                if (!NetworkManagement.networkIsLinked) {
                    this.isPrintMessage(this.isSpontaneousNotice);
                    Thread.sleep(this.sleepMillisecondWhenNetWorkUnLinked);
                }
                System.out.println(NetworkManagement.IsNetWordLinking());
                Thread.sleep(this.sleepMillisecond);
            } catch (Exception e) {
            }
        }
    }

    private boolean canGetHtmlCode(String httpUrl) {
        String htmlCode = "";
        try {
            InputStream in;
            URL url = new java.net.URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("User-Agent", "Mozilla/4.0");
            connection.connect();
            in = connection.getInputStream();
            byte[] buffer = new byte[this.htmlCodeSize];
            in.read(buffer);
            htmlCode = new String(buffer);
        } catch (Exception e) {
        }
        if (htmlCode == null || htmlCode.equals("")) {
            return false;
        }
        return true;
    }

    private void isNetWorkLinked() {
        boolean tempIsNetWorkLinked = false;
        for (int urlsCount = 0; urlsCount < this.urls.length; urlsCount++) {
            if (this.canGetHtmlCode(this.urls[urlsCount])) {
                tempIsNetWorkLinked = true;
                break;
            }
        }
        NetworkManagement.networkIsLinked = tempIsNetWorkLinked;
    }
    private void isPrintMessage(boolean isPrint) {
        if (isPrint) {
            toolkit.beep();
            StringBuffer message = new StringBuffer();
            message.append("------------->");
            message.append("网络中断, ");
            message.append(this.sleepMillisecondWhenNetWorkUnLinked);
            message.append(" 毫秒后再次检测!<-------------");
            System.out.println(message.toString());
        }

    }
    public static void main(String[] args) {
        NetworkManagement n = new NetworkManagement();
        n.isSpontaneousNotice(true);
    }
}

原文:http://www.blogjava.net/hwpok/archive/2007/12/07/166121.html

<think>嗯,用户想知道如何在Halcon中实现区域连通性的代码示例。首先,我需要回忆一下Halcon的相关操作。区域连通性通常涉及将图像中的连通区域分开或合并。Halcon中常用的算子可能有connection、select_shape、select_region_point之类的。 根据引用[3],里面提到了OpenCVSharp实现类似region_feature算子,包括连通性特征。虽然用户问的是Halcon,但可能相关操作类似。比如,Halcon的connection算子可以将区域分割成连通区域,然后使用select_shape来选择特定特征的区域。 用户可能需要的是如何用Halcon代码找到连通区域,并可能进行筛选。例如,先读取图像,进行阈值处理得到区域,然后用connection分割成各个连通区域,再计算它们的特征,比如面积,筛选出符合条件的区域。 另外,引用[2]提到Halcon在工业制造等领域的应用,这可能和区域连通性分析有关,比如检测产品缺陷时,需要分离不同的缺陷区域。 所以,可能的步骤是:读取图像→二值化→connection分割连通区域→特征提取→筛选。需要给出具体的代码示例,比如使用connection后,如何遍历每个连通区域,或者使用select_shape来选面积较大的区域。 需要确保代码语法正确,比如Halcon的算子用法,变量命名等。可能还需要解释每个步骤的作用,帮助用户理解。例如,connection的作用是将输入区域分割为互不连通的独立区域,然后select_shape根据面积等特征筛选。 另外,用户可能想了解如何获取每个连通区域的属性,比如中心坐标、面积,或者如何在图像上显示结果。因此代码示例可能需要包含这些部分,比如使用area_center算子计算每个区域的面积和中心点,并用dev_display显示结果。 还要注意可能出现的常见问题,比如二值化阈值的选择影响连通区域的数量,或者如何合并相邻的小区域。但用户主要问的是连通性实现的示例,所以可能需要保持代码简洁,专注于主要步骤。 总结一下,Halcon实现区域连通性的代码大致流程是:读取图像→处理得到区域→分割连通区域→处理或筛选这些区域。需要写出这个流程的具体代码,并解释关键步骤。</think>### Halcon 实现区域连通性的代码示例 #### 1. 核心实现步骤 在 Halcon 中实现区域连通性分析主要通过以下步骤: 1. **图像预处理**:通过阈值分割获取候选区域 2. **连通域分割**:使用 `connection` 算子分离不连通的区域 3. **特征筛选**:通过 `select_shape` 筛选符合条件的区域 4. **结果可视化**:标注显示连通区域特征 ```cpp * 读取测试图像 read_image (Image, 'ic_pin') * 创建空对象用于后续处理 gen_empty_obj (ConnectedRegions) * 阈值分割获取初始区域 threshold (Image, Regions, 128, 255) * 关键步骤:分离连通区域 connection (Regions, ConnectedRegions) * 筛选面积大于100像素的连通区域 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 100, 99999) * 计算区域特征 area_center (SelectedRegions, Area, Row, Column) * 可视化设置 dev_set_draw ('margin') dev_set_line_width (2) * 显示结果 dev_display (Image) dev_display (SelectedRegions) * 标注特征信息 for i := 0 to |Area|-1 by 1 set_tposition (3600, Row[i], Column[i]) write_string (3600, 'Area:'+Area[i]+' Center:'+round(Row[i])+','+round(Column[i])) endfor ``` #### 2. 关键算子解析 1. `connection`:将输入区域分割为互不连通的独立区域[^3] 2. `select_shape`:根据形状特征筛选区域,支持30+特征参数(面积、宽度、圆度等) 3. `area_center`:计算区域的面积和质心坐标 #### 3. 进阶应用场景 1. **工业检测**:电子元件引脚连通性分析 ```cpp * 检测引脚缺失 count_obj (SelectedRegions, Number) if (Number != 4) dev_display (Image) disp_message (3600, 'Missing pin detected!', 'window', 10, 10, 'red', 'true') endif ``` 2. **生物医学**:细胞计数与形态分析 ```cpp * 计算细胞圆度 circularity (SelectedRegions, Circularity) * 筛选异常细胞(圆度<0.85) select_shape (SelectedRegions, AbnormalCells, 'circularity', 'and', 0, 0.85) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值