java实现系统定时无限重启源代码
代码的功能是用Java实现定时无限重启的小软件。
使用的jar包是jdom.jar
代码读取系统时间判断是否到达设定时间。如果是则显示密码输入提示。如果密码输入错误或者不输入密码或者任务管理器结束程序都会引起程序重启。
能力有限智能手动放在启动里面。不会写入注册表。代码也很乱。请见谅。
第一步:安装jre
要有jre否则无法执行。有些软件能够将jar文件与jre打包成exe文件。我没试成功。有心的网友可以试试。
第二步:启动程序
把程序与XML文件放在同一个文件夹下。创建程序的快捷方式。将快捷方式拖入开始->所有程序->启动里面。
第三部:设置时间密码
时间与密码在代码对应的XML文件中配置。默认文件名为time.xml
xml文件格式为
主类
package com.win;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class restar extends JFrame {
SimpleDateFormat df=null;
resXml xml = null;
int time;
String password;
public restar(){//调用父类的构造函数
super("Window");
}
public void creatWin()throws Exception{//创建弹出窗口,并添加监听事件JFrame frame = new JFrame("win");
frame.getContentPane().setLayout(null);
frame.setBounds(600, 300, 250, 100);
frame.getContentPane().setBackground(Color.orange);
frame.addWindowListener(new WindowListener(){
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
try {
res();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
});
frame.setUndecorated(true);
JLabel label = new JLabel();
label.setBounds(0, 0, 250, 20);
label.setText("请输入密码!");
label.setVerticalAlignment(SwingConstants.TOP);
label.setHorizontalAlignment(SwingConstants.CENTER); label.setVisible(true);
JLabel labelNum = new JLabel();
labelNum.setBounds(205, 20,45, 30);
labelNum.setVerticalAlignment(SwingConstants.TOP); labelNum.setHorizontalAlignment(SwingConstants.CENTER); labelNum.setVisible(true);
final JTextField textField = new JTextField();
textField.setBounds(0, 20, 140, 30);
textField.setVisible(true);
JButton button = new JButton("确认");
button.setBounds(145, 20, 60, 30);
button.setVisible(true);
frame.add(labelNum);
frame.add(button);
frame.add(label);
frame.add(textField);
frame.setVisible(true);
for(int i=5;i>=0;i--){
Thread.currentThread().sleep(1000);
labelNum.setText(""+i);
if(i==0){
res();
}else{
button.addActionListener( new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
xml= new resXml();
try {
password=xml.inPut().getChild("password").getText();
if(textField.getText().equals(password)){
System.exit(0);
}else{
res();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
}
}
public void res()throws Exception{//系统重启方法
Process p = Runtime.getRuntime().exec("Shutdown -r -t 1 ");
}
public String getTime(){//获得当前时间方法
df = new SimpleDateFormat("yyyyMMdd");
String date= df.format(new Date());
return date;
}
public int StToInt(String str){//字符串转换成数字方法
int date = Integer.parseInt(str);
return date;
}
//public String creatBat(){
//String bat="c:/res/qq.exe";
//return bat;
//}
static {//静态快使用本地外观
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception{
restar rs= new restar();
resXml xml = new resXml();
//File file = new File("C:/Users/123/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/qq.bat");
// OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream(file));
//BufferedWriter writer = new BufferedWriter(osr);
// writer.write("c:\\res\\qq.exe");
// writer.close();
int time=rs.StToInt(xml.inPut().getChild("time").getText());
boolean flag=true;
while(flag){
if(rs.StToInt(rs.getTime())>=time){
rs.creatWin();
flag=false;
}
Thread.currentThread().sleep(10000);//每10秒获取一次时间。jvm有充足时间释放内存
}
}
}
XML类
package com.win;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class resXml {
public Element inPut()throws Exception{
//String S_time=null;
//String password=null;
//String settime=null;
Element node=null;
SAXBuilder builder = new SAXBuilder(false);
Document doc = builder.build("time.xml");
Element root = doc.getRootElement();
List timeAndpass = root.getChildren("timeAndpass");
for(int i=0;i node =(Element)timeAndpass.get(i); //Element time = node.getChild("time"); //Element pass = node.getChild("password"); //settime=time.getText(); } return node; } }