控制上网!!!(版本之1.1) 当前时间从网络取得。
2012-01-29 21:26
357 查看
为了防止修改本地时间~
2
3
注意:
在使用jar包的工程中导出jar文件时。
我们要把我们引用的jar文件解开后,在导出jar文件。
也就是说导出后的jar文件里面没有jar文件!!
--------------------------------------------------------
如果你不这么做,程序是无法找到那些jar文件中引用的类的!!!
package com.sxz.timecontroal; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.UnknownHostException; import java.util.Calendar; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; /** * 当可以连接网络时,取得网络上的时间使用。 * * @author sunxuezhi 2012/01/29 */ public class CheckTImeWithNet { /** * 获取时间数据所在的网点地址 */ private static final String NET_TIME_URL = "http://open.baidu.com/special/time/"; /** * 获取时间数据所在行的key值 */ private static final String NET_TIME_FIND_KEY_WORD = "window.baidu_time("; /** * 网络上的时间 */ private Calendar netDate = Calendar.getInstance(); /** * 获取当前 网络上的时间 */ public Calendar getNetDate() { return netDate; } /** * 设置当前 网络上的时间 */ public void setNetDate(long netDate) { this.netDate.setTimeInMillis(netDate); } @SuppressWarnings("finally") public boolean checkTime() { boolean flag = true; try { // 创建连接 HttpClient httpClient = new HttpClient(); // 设置请求参数 GetMethod getMethod = new GetMethod(NET_TIME_URL); // 设置读取网页数据时的编码格式 getMethod.addRequestHeader( "Content ", "text/html,charset=GBK"); // 进行网络连接,并获取返回结果code,根据这个code判断,当前是否连接到网络。 int statusCode = httpClient.executeMethod(getMethod); if(statusCode != 200){ System.out.println("网络数据有问题,有待调整获取资源的途径"); return false; } // 获取网页信息 InputStream responseBody = getMethod.getResponseBodyAsStream(); // 设置编码格式 BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody,"GBK")); // 一行一行的取出信息 String tempBf = null; while((tempBf=reader.readLine()) != null){ // 寻找有效数据 // window.baidu_time(1327819975724); int timeRowCheckFlag = tempBf.indexOf(NET_TIME_FIND_KEY_WORD); // 找到网络时间数据所在行。 if(timeRowCheckFlag > 0){ // 去掉数据中的无用数据,得到时间字符串 // window.baidu_time(1327819975724); ->1327819975724 String netTimeStr = tempBf.replaceAll("[^\\d]", ""); // 当前网络时间 long netTimeMillis = Long.parseLong(netTimeStr); // 设置当前网络上的时间 this.setNetDate(netTimeMillis); // 当找到网络上的的时间时,不必再从该网页上读取数据了! break; } } } catch(UnknownHostException ex){ // 网络连接失败 flag = true; System.out.println("网络连接失败!"); ex.printStackTrace(); }catch (IOException e) { flag = true; System.out.println("IO错误,程序还需要调整!"); e.printStackTrace(); } catch(Exception e){ flag = true; System.out.println("其他错误,程序还需要调整!"); e.printStackTrace(); } finally{ return flag; } } }
2
package com.sxz.timecontroal; import java.util.Calendar; /** * @author sunxuezhi 2012/01/28 * @author sunxuezhi 2012/01/29 */ public class TimeControal implements Runnable { private static int countFiveMinute = 0; /** * 程序每次检查的间隔时间设置为5分钟(300000)。 */ private static final int TIME_BETWEEN_CHECK = 300000; /** * 程序最多检查的次数( 次数(36) * 时间间隔 = 限定开机时间 )。 */ private static final int MAX_CHECK_COUNT = 36; /** * 线程 */ public void run() { try { CheckTImeWithNet netTime = new CheckTImeWithNet(); // 连接网络,判断并设定当前时间。 netTime.checkTime(); // 获取当前时间,当连接到网络时,为网络上的时间 Calendar date = netTime.getNetDate(); // 控制1:超过当前时间22:30 if(TimeControal.isNowTimeHaveToShutDown(date)){ // 关机 TimeControal.shutdown(); } // 每隔5分钟再检查一次 Thread.sleep(TIME_BETWEEN_CHECK); // 控制2:开机后时间超过3个小时 if (TimeControal.startedTime()){ // 关机 TimeControal.shutdown(); } } catch (InterruptedException e) { e.printStackTrace(); } } /** * @param 当前时间(当连接到网络时为网络上的时间,没有连接时为系统时间) * * 当前时间判断,超过10:30关机 * * 超过限定时间,返回ture * */ public static boolean isNowTimeHaveToShutDown(Calendar date){ // 是否超过限定时间,判定flag boolean flag = false; if(date.get(Calendar.HOUR_OF_DAY) >= 23 || date.get(Calendar.HOUR_OF_DAY) < 6){ flag = true; } if(date.get(Calendar.HOUR_OF_DAY) == 22 && date.get(Calendar.MINUTE) > 30){ flag = true; } return flag; } /** * * 开机后时间是否超过3个小时判定。 * * 如果开机后达到3个小时,返回ture * */ public static boolean startedTime(){ // 是否达到3个小时,判定flag boolean flag = false; // 间隔次数计数 countFiveMinute ++; // 有36次5分钟的计时,表明已经3个小时了。 if(countFiveMinute >= MAX_CHECK_COUNT){ flag = true; } return flag; } /** * 1分钟内关机 */ public static void shutdown(){ try { // 1秒内自动关机 // 原本想设定为60秒,但是当出现自动关机选项时 // 你把系统时间往前调,你会发现关机时间也跟着增加 // 同时,这个程序也有一个bug,就是如果开机后我就运行shutdown -s -t 9000000命令 // 程序就不会关机了。 Runtime.getRuntime().exec("shutdown -s -t 1"); } catch (Exception e) { e.printStackTrace(); } } }
3
package com.sxz.timecontroal; /** * @author sunxuezhi 2012/01/28 * @author sunxuezhi 2012/01/29 */ public class MainTimeControal { /** * 时间控制 */ public static void main(String[] args) { TimeControal timeContraol = new TimeControal(); Thread thread = new Thread(timeContraol); try { // 刚刚开机以后,可能还没有连接到网络 Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } while (true) { // 使程序一直处于运行状态 thread.run(); } } }
注意:
在使用jar包的工程中导出jar文件时。
我们要把我们引用的jar文件解开后,在导出jar文件。
也就是说导出后的jar文件里面没有jar文件!!
--------------------------------------------------------
如果你不这么做,程序是无法找到那些jar文件中引用的类的!!!
相关文章推荐
- ros控制上网时间,网络定时通断
- ros控制上网时间,网络定时通断
- 查询某段时间用户登录信息,并且当前版本不是1.72
- JS 取得当前日期时间(文本形式)
- 获取当前网络时间
- 用java取得当前时间
- SQL中取得当前时间
- java一句话取得当前系统时间的前一天
- [转]上网时间控制_指定时间上网_上网时间段管理-百络网警
- python从网络时间服务器获取并打印当前时间以及pip安装ntplib的一次体验
- 让电脑密码自动更改并控制小朋友上网时间
- Git 时间,版本控制工具进阶
- Git学习——1.1 关于版本控制
- 如何取得当前时间并计算时间差
- 在PHP代码中取得当前日期时间再插入数据库
- java取得当前时间。
- java 当前系统时间 加一天怎么取得?
- (一)Git时间--初识版本控制工具
- C++ 取得系统当前时间
- 根据当前时间取得星期一跟星期天的日期