定制java虚拟机
最近有网友问:如何让一个JAR文件随JVM启动时运行?java.exe是不能够做成这样的,不过可以自己定制java.exe,定制java.exe在如下情况有用:
1.不想程序的进程名显示为java.exe
2.希望程序双击就可以运行。
下面是一段示例代码:
// JVM_CPP.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include <jni.h>
typedef jint (JNICALL *JNICREATEPROC)(JavaVM**, void**, void*);
bool setStream(JNIEnv* env, const char* pszFileName, const char* pszMethod);
//启动java虚拟机方法
bool startJvm()
{
//jvm动态库的路径
const TCHAR szJvmPath[] = _T("E:\\java\\jdk\\jdk1.6.0\\jre\\bin\\server\\jvm.dll");
//java 虚拟机的启动参数,每个参数写一项,不能合在一起写
int nOptionCount = 2;
JavaVMOption options[2];
options[1].optionString = "-Xmx256M";
//设置classpath
options[0].optionString = "-Djava.class.path=./Test.jar;";
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_4;
vm_args.options = options;
vm_args.nOptions = nOptionCount;
vm_args.ignoreUnrecognized = JNI_TRUE;
//启动类,注意分割符是/,例如启动类test.JTest应该写成 test/JTest
const char szStartClass[] = "com/kortide/JVM/Test";
//启动方法,通常是main函数,你也可以设定成其他函数
const char szStartMethod[] = "main";
//重导向文件
const char* szStdoutFileName = "stdout.txt";
const char* szStderrFileName = "stderr.txt";
//java程序的命令行参数
int nParamCount = 2;
const char* szParams[2] =
{
"arg1", "arg2"
};
//加载JVM。
HINSTANCE jvmDll = LoadLibrary(szJvmPath);
if (jvmDll == NULL)
{
printf("加载JVM动态库错误。%l", ::GetLastError());
return false;
}
//查找JNI_CreateJavaVM过程。
JNICREATEPROC jvmCreateProc = (JNICREATEPROC) GetProcAddress(jvmDll,
"JNI_CreateJavaVM");
if (jvmCreateProc == NULL)
{
FreeLibrary(jvmDll);
prin
相关文档:
2009年10月31日 星期六 15:32
package Client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.nio.channels.Il ......
public static void replaceString(String source,String oldStr,String newStr){
System.out.println(source);
String result = source.replaceAll("(?i)"+oldStr
, newStr); //大小写不敏 ......
来自:http://www.cnblogs.com/echozhjun/archive/2010/01/08/1641970.html
JDK Logger
JDK Logger在java.util.logging包下面,自从JDK1.4就有了,可是因为log4j的存在,这个Logger一直沉默着。Java自带的Logger,级别比Log4j还要详细,但是如果需要自定义日志输出格式,需要自己实现Formatter,有些不方便。
Log4j  ......
StringTokenizer 这个类其实真正项目里面恐怕很少会用吧?但是这个类真的很实用,因为它可以根据自己的方式按照一定的规则来拆分一个字符串
String s = new String("The Java platform is the ideal platform for network computing");
//默认的构造函数,会 ......