java32注册的简单介绍

博主:adminadmin 2022-12-26 17:36:08 66

本篇文章给大家谈谈java32注册,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何注册java程序为windows服务

这里介绍下如何利用javaService 软件把java 程序注册为windows 服务。

一、 利用javaService 注册java 程序为windows 服务

[1] 下载javaService

访问网址 下载windows 版本的javaService 文件,我下载的是JavaService-2.0.10.rar ,目前最新的版本就是“2.0.10 ”。

[2] 安装javaService

解压我们下载下来的javaServices 到一个目录,我是解压到目录“D:/software/JavaService-2.0.10 ”下(解压到任何目录都可以,最好别解压到中文目录,省的出现问题 )

[3] 编写定时关机代码,见第二章的定时关机代码

1) 具体代码参加第二章,类的名字为:

com.test.timer.TimerShutDownWindows

2) 把编写后的java 文件导出为class 的形式,把导出的类放到目录“D:/software/JavaService-2.0.10/classes/com/test/timer ”下。也就是把导出的com 包放到

“D:/software/JavaService-2.0.10/classes” 目录下。

[4] 注册java 程序为windows 服务

进入“D:/software/JavaService-2.0.10 “目录,执行如下命令:

JavaService.exe -install MyShutDownService "%JAVA_HOME%"/jre/bin/server/jvm.dll -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;D:/software/JavaService-2.0.10/classes -start com.test.timer.TimerShutDownWindows

其中“-install “后面的参数为服务的名称,“-start ”参数后边是要启动的类名,“Djava.class.path ”后面参数中的

“D:/software/JavaService-2.0.10/classe ”地址是我的“TimerShutDownWindows ”类存放的路径,实际应用中修改为自己的classPath 即可。

这里需要注意几点:

1) “%JAVA_HOME% ”jdk 目录,如果没有配置jdk 目录,则替换为jdk 的实际绝对地址。

2) -Djava.class.path 是必须的,因为服务启动的时候无法访问系统的CLASSPATH 变量,所以必须在这里声明;如果jar 比较多,为避免写的命令过长,我们可以使用“-Djava.ext.dirs=jars 所在目录”参数。

3) 服务添加之后,可以在命令行中敲入“services.msc ”命令来查看所有服务,并可以对服务的启动类型(自动启动还是手动启动等)进行修改。

[5] 测试

1) 启动服务

当我们注册完服务后,我们可以通过命令“net start MyShutDownService ”来启动该服务,服务启动后会在D 盘根目录生成my_shutdown.log 日志文件。

2) 关闭服务

如果我们要关闭服务,可以通过命令“net stop MyShutDownService ”来关闭该服务。

3) 删除服务

当我们想删除该服务时,可以使用命令“sc delete MyShutDownService ”来删除该服务。

二、 定时关机代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

package com.test.timer;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class TimerShutDownWindows {

/* 检测是否需要关机的时间间隔 */

private static long m_nDetectInterval = 5000;

/* 记录上次检测的时间,以毫秒为单位 */

private static long m_lLastMilliSeconds = 0;

/* 可以使用电脑的最小小时 */

private static int m_nUsePCMinHour = 17;

/* 可以使用电脑的最大小时 */

private static int m_nUseComputerMaxHour = 23;

/* 如果分钟超过这个时间,则关机计算机 */

private static int m_nMinutes = 25;

/* 记录日志的文件的保存位置 */

private static String m_sLogFile = "D:" + File.separator

+ "my_shutdown.log";

/* 记录当前系统是否已经启动自动关闭程序 */

private static boolean bHasShutDownPC = false;

/**

* @param args

*/

public static void main(String[] args) {

// 1. 单独开启一个线程去检测

Thread aThread = new Thread(new TimerDetector());

aThread.start();

}

/**

* 定义内部类

*

* @author Administrator

*

*/

static class TimerDetector implements Runnable {

/*

* (non-Javadoc)

*

* @see java.lang.Runnable#run()

*/

public void run() {

// 1. 获取日志文件

PrintWriter out = null;

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

out = new PrintWriter(new FileWriter(m_sLogFile, true), true);

} catch (IOException e1) {

out = null;

e1.printStackTrace();

}

// 2. 记录服务启动时间

appendLog(out, " 服务启动时间:" + df.format(new Date()));

while (true) {

// 1. 判断当前系统时间是否被修改过

boolean bShoudShutDownPC = validateShoudShutDownPC(out);

if (bShoudShutDownPC) {

// 验证没通过,强制关机

exectueShutDown(out);

} else {

bHasShutDownPC = false;

}

// 2. 当前线程休眠下

try {

Thread.sleep(m_nDetectInterval);

} catch (InterruptedException e) {

appendLog(out, e.getMessage());

}

}

}

/**

* 验证当前时间是否是需要关机的时间

*

* @return

*/

private boolean validateShoudShutDownPC(PrintWriter _out) {

// 1. 判断是否修改了系统时间

boolean bHasModifySystemTime = detectModifySytemTime(_out);

appendLog(_out, "bHasModifySystemTime :" + bHasModifySystemTime);

if (bHasModifySystemTime) {

return bHasModifySystemTime;

}

// 2. 没有修改系统时间,则判断当前时间是否超过了指定的时间

boolean bShoudSleep = nowIsSleepTime();

appendLog(_out, "bShoudSleep :" + bShoudSleep);

if (bShoudSleep) {

return bShoudSleep;

}

return false;

}

/**

* 判断当前时间是否应该休息的时间

*

* @return

*/

private boolean nowIsSleepTime() {

// 1. 获取当前小时和分钟

Calendar aCalendar = Calendar.getInstance();

int nHour = aCalendar.get(Calendar.HOUR_OF_DAY);

int nMinute = aCalendar.get(Calendar.MINUTE);

// 2. 判断当前小时是否在可以使用PC 的时间内, 最大小时为23

if (nHour m_nUsePCMinHour) {

return true;

}

// 23 点需要单独判断,超过23 点30 就应该休息

if ((nHour = m_nUseComputerMaxHour) (nMinute = m_nMinutes)) {

return true;

}

// 3. 非休息时间

return false;

}

/**

* 判断是否有人修改了系统时间,如果有人修改了系统时间返回true ,

* 否则返回false

*

* @return

*/

private boolean detectModifySytemTime(PrintWriter _out) {

// 1. 第一次检测系统时间

if (m_lLastMilliSeconds == 0) {

m_lLastMilliSeconds = System.currentTimeMillis();

return false;

}

// 2. 检测两次时间的差值

long lInteral = System.currentTimeMillis() - m_lLastMilliSeconds;

lInteral = Math.abs(lInteral);

// 3. 判断两次的时间间隔, 两次结果不一定完全等于 m_nDetectInterval ,允许误差为1 分钟

long lMaxInterval = m_nDetectInterval + 60 * 1000;

appendLog(_out, "lInteral :::" + lInteral);

appendLog(_out, "lMaxInterval :::" + lMaxInterval);

if (lInteral lMaxInterval) {

// 有人修改了系统时间,强制关机

return true;

}

// 4. 只有没人修改时间才记录上次检测时间

m_lLastMilliSeconds = System.currentTimeMillis();

return false;

}

/**

* 在指定的流中写入日志信息

*

* @param _outWriter

* @param _sAppendContent

*/

private void appendLog(PrintWriter _outWriter, String _sAppendContent) {

if (_outWriter == null) {

return;

}

_outWriter.println(_sAppendContent);

}

/**

* 执行关机命令

*/

private void exectueShutDown(PrintWriter _out) {

if (bHasShutDownPC) {

SimpleDateFormat df = new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss");

appendLog(_out, " 系统即将关闭, 当前时间:" + df.format(new Date()));

return;

}

appendLog(_out, " 有人修改了系统时间,系统强制关机!");

// 关机

try {

Runtime.getRuntime().exec(

"shutdown -s -t 120 -c /" 很晚了,该睡觉了,2 分钟后关闭计算机。/"");

} catch (IOException e) {

appendLog(_out, e.getMessage());

}

bHasShutDownPC = true;

}

}

}

Java中怎么注册协议

注册协议

URL的static URLStreamHandler getURLStreamHandler(String protocol) 方法用于获取获取协议处理类

URL提供了两种注册协议的途径。

1)设置URLStreamHandlerFactory,2)设置jvm启动参数java.protocol.handler.pkgs。

两者可以同时使用。

设置URLStreamHandlerFactory

URL的方法

public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {

synchronized (streamHandlerLock) {

if (factory != null) {

throw new Error("factory already defined");

}

SecurityManager security = System.getSecurityManager();

if (security != null) {

security.checkSetFactory();

}

handlers.clear();

factory = fac;

}

}

public interface URLStreamHandlerFactory {

URLStreamHandler createURLStreamHandler(String protocol);

}

整个jvm只能设置一次,再次设置不起作用。调用URL.setURLStreamHandlerFactory(fac)。

一般是在服务器的代码中设置,比如tomcat,jboss ,was等,用于注册服务器自己的协议,应用级没法设置,因为服务器已经设置过了,应用即使设置了也不起作用。

启动参数-Djava.protocol.handler.pkgs

通过-Djava.protocol.handler.pkgs=cn.ccb.wfcp注册自定义协议的包。要求协议处理类的类名必须是Handler,包名的最后是协议名。示例如下,定义了brules协议。

package cn.ccb.wfcp.brules;

public class Handler extends URLStreamHandler {

如果要定义多个协议包就用"|"分割,比如-Djava.protocol.handler.pkgs=cn.ccb.wfcp|cn.ccb.wfcp22.

jvm内置的协议也是按照上面的方式定义的,但不用通过-Djava.protocol.handler.pkgs注册,而是将内置的协议包拼接到后面。内置协议都在sun.net.包下面。

获取到Handler类名后去加载class。Class cls = null;

try {

cls = Class.forName(clsName);

} catch (ClassNotFoundException e) {

ClassLoader cl = ClassLoader.getSystemClassLoader();

if (cl != null) {

cls = cl.loadClass(clsName);

}

}

if (cls != null) {

handler =

(URLStreamHandler)cls.newInstance();

}

将java程序注册成windows服务??

我猜你是要将tomcat中的java程序做成服务吧?如果是的话用下面的方法

1.打开你tomcat中的bin文件夹.(不同计算机上tomcat路径可能不一样,具体视情况而定),用文本打开(不是双击打开)service.bat.在其文本里面搜索--JvmMs 128 --JvmMx 256,(我个人比较偷懒,直接搜索 256,哈哈,一样的结果)在后面添加 --Startup=auto(注意:前面要有空格),点击保存就OK了。

2.运行---输入cmd---dos窗口,进行tomcat中bin文件夹下. 直接输入:service.bat,出现Usage: service.bat install/remove [service_name] 说明你第一步工作已经正确完成了.

3.在打开的dos窗口输入: service.bat install?tomcat5(安装服务)

4.?很多人第三步完成之后,就直接windows服务里面启动就可以了,但是我发现还有少部分人启动的时候,windows服务那边提示“Apache Tomcat 服务因 0 (0x0) 服务性错误而停止”解决这个问题很简单:把 JRE \BIN目录下的 msvcr71.dll 文件拷贝到 C:\windows\system32 下面

java32注册的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java32注册的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。