文章目录

  • 程序说明
  • 运行截图
  • 项目结构截图
  • main类
  • ActionListener1类
  • ItemListener1类
  • Jfwindow类
  • shut类
  • XialaItmeListener类
  • module-info.java
  • 左上角的图标
  • 总结


程序说明

本程序是利用Java的GUI编写的通过执行cmd命令来进行的简单的定时关机和定时重启的程序,本程序具有定时关机与定时重启的功能可以按小时定时,也可以按分钟定时以及按秒来定时,最大的定时时间为315360000秒。使用了maven进行构建jdk11进行开发工具使用的是ideaj社区版,项目的地址为定时关机

运行截图

java 服务定时被启动 java程序定时重启_intellij-idea

项目结构截图

java 服务定时被启动 java程序定时重启_maven_02

main类

/* 作者:徐俊日、
 *
   版本:2.0
*/
package shutdown;
public class main {
	public static void main(String atgs[])
	{
		Jfwindow jfwindow=new Jfwindow();
		jfwindow.ShowWindow();//显示窗口布局

	}
}

ActionListener1类

package shutdown;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
public class ActionListener1 implements ActionListener
{
	Jfwindow view;//设置jfwindow的变量view
	int str;
    static String jrbut="shutdown";//类变量共用储存
    
	public void setView(Jfwindow view)
	{
		this.view=view;
	}
	//调用JOptionPane类的静态方法showmessagedialog方法来创建一个消息对话框
	//第一个参数指定对话框可见时的位置,null在屏幕正前方显示,不为空在正前面居中显示;
	//第二个参数设置要显示的消息
	//第三个参数设置对话框的标题
	//第四个参数指定对话框的类型,例如warning_message信息右侧会显示一个!号
	//第五个参数an icon to display in the dialog that helps the useridentify the kind of message that is being displayed

	public void actionPerformed(ActionEvent e)
	{
		String onlynum="^[0-9]+$";//正则表达式来判断输入的是不是正整数
		String str=view.text1.getText();
		int time;
		
		shut cancel=new shut();
	 	shut shut=new shut();
	 	
		if(e.getSource()==view.button1)//当选中第一个单选按钮和点击第一个按钮后的操作
		{
			if(str.matches(onlynum)) //Matched()方法用来对滴str与onlynum是不是符合
		 	{
				time=Integer.parseInt(str);//将文本型数字转换成int型数字
				if(XialaItmeListener.item=="秒")
				{
					if(time>=0 && time<315360000)
					{System.out.print(time+"秒\n");//在控制台输出内容
						shut.getTime(time);//符合则将时间传入给shut类
				 		if(jrbut=="shutdown") //通过jrbut的值来判断选择哪个功能
						{
							shut.shutdown();
						}
						else if(jrbut=="reboot")
						{
							shut.Reboot();
						}
						else if(jrbut==null)
						{
							JOptionPane.showMessageDialog(view, "请选择功能!", "警告",JOptionPane.INFORMATION_MESSAGE);
						}
					}
					else
					{
						JOptionPane.showMessageDialog(view, time+"超出最大时间315360000秒", "警告",JOptionPane.WARNING_MESSAGE);
					}
				}
				else if(XialaItmeListener.item=="分钟")
				{
					time=time*60;
					if(time>=0 && time<315360000)
					{System.out.print(time/60+"分钟\n");//在控制台输出内容
						shut.getTime(time);//符合则将时间传入给shut类
				 		if(jrbut=="shutdown") //通过jrbut的值来判断选择哪个功能
						{
							shut.shutdown();
						}
						else if(jrbut=="reboot")
						{
							shut.Reboot();
						}
						else if(jrbut==null)
						{
							JOptionPane.showMessageDialog(view, "请选择功能!", "警告",JOptionPane.INFORMATION_MESSAGE);
						}
					}
					else
					{
						JOptionPane.showMessageDialog(view, time/60+"超出最大时间5256000分钟", "警告",JOptionPane.WARNING_MESSAGE);
					}
				}
				else if(XialaItmeListener.item=="小时")
				{
					time=time*60*60;
					if(time>=0 && time<315360000)
					{System.out.print(time/60/60+"小时\n");//在控制台输出内容
						shut.getTime(time);//符合则将时间传入给shut类
				 		if(jrbut=="shutdown") //通过jrbut的值来判断选择哪个功能
						{
							shut.shutdown();
						}
						else if(jrbut=="reboot")
						{
							shut.Reboot();
						}
						else if(jrbut==null)
						{
							JOptionPane.showMessageDialog(view, "请选择功能!", "警告",JOptionPane.INFORMATION_MESSAGE);
						}
					}
					else
					{
						JOptionPane.showMessageDialog(view, time/60/60+"超出最大时间87600小时", "警告",JOptionPane.WARNING_MESSAGE);
					}
				}
		 	}
		 	else
		 	{
		 		JOptionPane.showMessageDialog(view, "请输入正整数时间", "定时关机", JOptionPane.WARNING_MESSAGE, null);
		 	}
			
		}
		
		else if(e.getSource()==view.button2)
		{
			
				cancel.Cancel();
				
		}
	}
}

ItemListener1类

package shutdown;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class ItemListener1 implements ItemListener//为单选按钮添加不同的监听器来监听悬着的功能
{
	
	Jfwindow view2;//设置jfwindow的变量view2,用来储存jfwindow对象的引用
	public void setView(Jfwindow view)
	{
		this.view2=view;
	}
	
	@Override
	public void itemStateChanged(ItemEvent e) 
	{
		
		// TODO 自动生成的方法存根
		if(e.getSource()==view2.jrbutton1)
		{
			ActionListener1.jrbut="shutdown";//调用actionlistener的类变量来改变jrbut变量的值	
		}
		else if(e.getSource()==view2.jrbutton2)
		{
			ActionListener1.jrbut="reboot";
			
		}
	}
	
}

Jfwindow类

package shutdown;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
/*先设置窗口,然后设置容器例如:Panel、JTabbedPane、JScrollPane、JSplitPane等容器
 * 然后为容器设置布局例如:网格布局gridlayout、flowlayout等
 * 然后设置组件,最后添加组件完成窗口设置,
 * 如果想要添加多个容器到窗口中,那么先要设置窗口的布局例如:flowlayout等,
 * 然后再添加其他的容器,如果不为窗口设置布局那么只能添加一个容器
 */
@SuppressWarnings("serial")
public class Jfwindow extends JFrame{
	JLabel Label1,Label2;
	JButton button1,button2;
	ButtonGroup buttongroup;
	JRadioButton jrbutton1,jrbutton2;
	JTextField text1;
	JComboBox<String> combox; 
	JPanel jpanel1;
	JPanel jpanel2;
	JPanel jpanel3;
	JPanel jpanel4;
	ActionListener1 listener;
	ItemListener1 listener2;
	XialaItmeListener listener3;
	public void ShowWindow()//设置窗口
	{
		JFrame jframe=new JFrame();//添加一个窗口对象
		GridLayout gridlayout=new GridLayout(4,1,0,0);//设置2行1列的网格布局,四个参数分别是行数、水平间距、垂直间距
		jframe.setLayout(gridlayout);//为frame添加布局才能添加多个容器,否者只能添加一个容器
		Setlayout();
		jframe.add(jpanel1);//添加容器
		jframe.add("这是面板2",jpanel2);//两种不同的add容器方法效果是一样的	
		jframe.add(jpanel3);
		jframe.add(jpanel4);
		jframe.setSize(400,300);//设置窗口大小
		jframe.setLocationRelativeTo(null);//设置窗口居中显示
		jframe.setTitle("定时关机2.0");
		Image icon=Toolkit.getDefaultToolkit().getImage("src/main/resources/image/dingshi.png");	//修改左上角的默认图标
		jframe.setIconImage(icon);
		jframe.setResizable(false);//让窗口大小不可调
		jframe.setVisible(true);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public void Setlayout()//设置容器
	{
		Font font=new Font("宋体",Font.BOLD,25);//设置字体
		Font font2=new Font("黑体",Font.HANGING_BASELINE,15);
		jpanel1=new JPanel();//设置面板容器,可以设置多个容器
		jpanel2=new JPanel();
		jpanel3=new JPanel();
		jpanel4=new JPanel();
		FlowLayout fllayout1=new FlowLayout(FlowLayout.LEFT);//设置flowlayout布局方式为LEFT对齐
		FlowLayout fllayout2=new FlowLayout();
		FlowLayout fllayout3=new FlowLayout(FlowLayout.CENTER);
		FlowLayout fllayout4=new FlowLayout();
		jpanel1.setLayout(fllayout1);//设置面板容器的布局
		jpanel2.setLayout(fllayout2);
		jpanel3.setLayout(fllayout3);
		jpanel4.setLayout(fllayout4);
		jrbutton1=new JRadioButton("关机",true);//设置组件的参数,false代表未选中
		
		jrbutton2=new JRadioButton("重启");
		buttongroup=new ButtonGroup();//为单选按钮设置按钮组,否者无法实现单选
		buttongroup.add(jrbutton1);//归组才能实现单选
		buttongroup.add(jrbutton2);
		button1=new JButton("开始");
		button2=new JButton("取消");
		Label1=new JLabel("请输入时间:");
		Label2=new JLabel("作者邮箱:hmyxhxjr@qq.com");
		text1=new JTextField(null,null,10);
		combox=new JComboBox<String>();//创建下拉列表
		combox.addItem("秒");//为下拉列表添加选项
		combox.addItem("分钟");
		combox.addItem("小时");
		Label1.setFont(font);//设置字体和大小
		Label2.setFont(font2);
		jrbutton1.setFont(font);
		jrbutton2.setFont(font);
		text1.setFont(font);
		button1.setFont(font);
		button2.setFont(font);
		combox.setFont(font);
		jpanel3.add(jrbutton1);/*为容器添加组件*/
		jpanel3.add(jrbutton2);
		jpanel1.add(Label1);
		jpanel2.add(text1);
		jpanel4.add(button1);//不同的容器可以添加不同的组件
		jpanel4.add(button2);
		jpanel2.add(combox);
		listener=new ActionListener1();//创建监视器
		listener2=new ItemListener1();
		listener3=new XialaItmeListener();
		listener.setView(this);//将当前窗口传递给listener组合的窗口
		listener2.setView(this);
		listener3.setView(this);
		jrbutton1.addItemListener(listener2);//jrbutton将listener注册为自己的监听器
		jrbutton2.addItemListener(listener2);
		button1.addActionListener(listener);
		button2.addActionListener(listener);
		text1.addActionListener(listener);
		combox.addItemListener(listener3);
	}
	
}

shut类

package shutdown;

import java.io.IOException;

import javax.swing.JOptionPane;

public class shut 
{
	Jfwindow view;
	int time;
	public int getTime(int time)
	{
		this.time=time;
		return time;
	}
	
	void shutdown()//关机
	{
		String str2="shutdown -s -t "+time;
		try {
			Runtime.getRuntime().exec(str2);//使用该方法来运行DOS的关机命令
			System.out.println(str2);
			JOptionPane.showMessageDialog(view, "已经开时定时关机", "定时关机", JOptionPane.OK_CANCEL_OPTION, null);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}	
	}
	void Reboot()//重启
	{
		String str2="shutdown -r -t "+time;
		try {
			Runtime.getRuntime().exec(str2);
			System.out.println(str2);
			JOptionPane.showMessageDialog(view,"已经开始定时重启", "定时重启", JOptionPane.OK_CANCEL_OPTION, null);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}	
	}
	void Cancel() //取消
	{
		try {
			Runtime.getRuntime().exec("shutdown -a");
			System.out.println("shutdown -a");
			JOptionPane.showMessageDialog(view, "已经取消", "取消定时任务", JOptionPane.OK_OPTION, null);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}

XialaItmeListener类

package shutdown;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class XialaItmeListener implements ItemListener{

	Jfwindow view;
	public static String item="秒";
	
	public void setView(Jfwindow view)
	{
		this.view=view;
	}
	@Override
	public void itemStateChanged(ItemEvent e) {
		// TODO 自动生成的方法存根
		item=view.combox.getSelectedItem().toString();
		
	}

}

module-info.java

module dingshiguanji {
	requires java.desktop;
}

左上角的图标

java 服务定时被启动 java程序定时重启_java 服务定时被启动_03

总结

module-info.java这个Java文件一定要加不加的话就报错。