工具和软件系列教材 (五十三)- DualUtil


步骤 1 : DualUtil
package util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class DualUtil { public static <T> T get(long seconds, Callable<T> callable) { final ExecutorService exec = Executors.newFixedThreadPool(1); T result = null; try { Future<T> future = exec.submit(callable); result = future.get(seconds, TimeUnit.SECONDS); } catch (Exception e) { } // 关闭线程池 exec.shutdown(); return result; } public static boolean isReachable(String ip) { try { boolean reachable = false; Process p = Runtime.getRuntime().exec("ping -n 1 " + ip); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { if (line.length() != 0) sb.append(line + "\r\n"); } reachable = sb.toString().contains("TTL"); br.close(); return reachable; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } public static void main(String[] args) throws InterruptedException, ExecutionException { Boolean b = get(1, new Callable<Boolean>() { @Override public Boolean call() throws Exception { return isReachable("192.168.2.129"); } }); System.out.println(b); // System.out.println(isReachable("192.168.2.119")); } }
package util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class DualUtil {
	public static <T> T get(long seconds, Callable<T> callable) {

		final ExecutorService exec = Executors.newFixedThreadPool(1);
		T result = null;
		try {
			Future<T> future = exec.submit(callable);
			result = future.get(seconds, TimeUnit.SECONDS);
		} catch (Exception e) {

		}
		// 关闭线程池
		exec.shutdown();
		return result;
	}

	public static boolean isReachable(String ip) {
		try {
			boolean reachable = false;

			Process p = Runtime.getRuntime().exec("ping -n 1 " + ip);
			BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line = null;
			StringBuilder sb = new StringBuilder();
			while ((line = br.readLine()) != null) {
				if (line.length() != 0)
					sb.append(line + "\r\n");
			}

			reachable = sb.toString().contains("TTL");
			br.close();
			return reachable;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

	public static void main(String[] args) throws InterruptedException, ExecutionException {

		Boolean b = get(1, new Callable<Boolean>() {

			@Override
			public Boolean call() throws Exception {
				return isReachable("192.168.2.129");
			}
		});
		System.out.println(b);

		// System.out.println(isReachable("192.168.2.119"));

	}
}
步骤 2 : 比较可运行项目,快速定位问题
跟着做了,但是还是有问题,跑不起来。
原有主要有二:
1. 自己做了改动,因为对项目还不熟悉,这些改动导致项目跑不起来。
2. 以为自己没做改动,其实还是做了改动,这个时常发生。
为了解决这个问题,站长特意把当前的可运行项目放在了右上角下载, 这样通过比较,就可以快速定位问题所在,大大地提高学习效率。

推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。
这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来
这里提供了绿色安装和使用教程:diffmerge 下载和使用教程
需要的附件在下载页的右上角,点击进入