window安装后桌面图标'Nxt Server' 执行nxt.exe。或者直接运行nxt.bat也可以,启动类nxt.Nxt.java
1,静态属性初始化
private static volatile Time time = new Time.EpochTime();
将当前时间转化为以未来币纪元开始时间计时(Constants.EPOCH_BEGINNING=2013.11.24 12:00:00)
(int)((System.currentTimeMillis() - Constants.EPOCH_BEGINNING + 500) / 1000);
单位秒
static {
redirectSystemStreams("out");
redirectSystemStreams("err");
System.out.println("Initializing Nxt server version " + Nxt.VERSION);
printCommandLineArguments();
runtimeMode = RuntimeEnvironment.getRuntimeMode();
System.out.printf("Runtime mode %s\n", runtimeMode.getClass().getName());
dirProvider = RuntimeEnvironment.getDirProvider();
System.out.println("User home folder " + dirProvider.getUserHomeDir());
loadProperties(defaultProperties, NXT_DEFAULT_PROPERTIES, true);
if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {
throw new RuntimeException("Using an nxt-default.properties file from a version other than " + VERSION + " is not supported!!!");
}
}
2.1读取系统日志输出配置属性。将System.out.out/error写入到文件
PersonalOptions=-server -Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true
private static void redirectSystemStreams(String streamName) {
//安装时会写入到系统
String isStandardRedirect = System.getProperty("nxt.redirect.system." + streamName);
。。。
System.setOut(new PrintStream(new PrintStream(Files.newOutputStream(Files.createTempFile("nxt.system.out.", ".log")))));
}
2.2打印命令行参数
printCommandLineArguments
就是打印-Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true
2.3 获取运行模式
runtimeMode = RuntimeEnvironment.getRuntimeMode()
window运行模式为desktop(nxt.runtime.mode=desktop) nxt.env.DesktopMode
2.4 获取工作目录
dirProvider = RuntimeEnvironment.getDirProvider()
如果系统没有指定工作目录,桌面模式下windows系统是用WindowsUserDirProvider
Paths.get(System.getProperty("user.home"), "AppData", "Roaming", "NXT").toString();
创建工作目录
C:\Users\zzy\AppData\Roaming\Nxt\
相关的数据都放在这,包括:启动配置、日志、区块链数据
2.5 载入配置属性
loadProperties(defaultProperties, nxt-default.properties, true);
将conf目录下的nxt-default.properties读取到Properties.(run.bat会将conf/下的此文件加入classpath)
2.6 代码版本与配置版本判断
if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {
2.7 第二个静态块初始化
private static final Properties properties = new Properties(defaultProperties);
使用nxt-default.properties的值作为初始化值,nxt.properties的值覆盖nxt-default.properties
static {
loadProperties(properties, NXT_PROPERTIES, false);
}
从工作目录(windows C:\Users\zzy\AppData\Roaming\Nxt\conf\)读取nxt.properties
如果没有此文件 则创建个空的。
3,执行main方法
public static void main(String[] args) {
try {
Runtime.getRuntime().addShutdownHook(new Thread(Nxt::shutdown));
init();
} catch (Throwable t) {
System.out.println("Fatal error: " + t.toString());
t.printStackTrace();
}
}
public static void init() {
Init.init();
}
指向内部Init的静态块初始化。