|
|
|
package com.fr.start.common;
|
|
|
|
|
|
|
|
import com.fr.design.fun.OemProcessor;
|
|
|
|
import com.fr.design.jdk.JdkVersion;
|
|
|
|
import com.fr.design.utils.gui.GUICoreUtils;
|
|
|
|
import com.fr.general.IOUtils;
|
|
|
|
import com.fr.log.FineLoggerFactory;
|
|
|
|
import com.fr.stable.image4j.codec.ico.ICODecoder;
|
|
|
|
import com.fr.stable.os.OperatingSystem;
|
|
|
|
import com.fr.start.OemHandler;
|
|
|
|
import javax.swing.*;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.awt.image.*;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 启动画面窗口
|
|
|
|
*
|
|
|
|
* @author vito
|
|
|
|
* @version 10.0
|
|
|
|
* Created by vito on 2019/10/16
|
|
|
|
*/
|
|
|
|
public class SplashWindow extends JFrame {
|
|
|
|
|
|
|
|
private SplashPane splash;
|
|
|
|
|
|
|
|
public SplashWindow() {
|
|
|
|
// alex:必须设置这个属性为true,才可以用透明背景
|
|
|
|
System.setProperty("sun.java2d.noddraw", "true");
|
|
|
|
|
|
|
|
initTitleIcon();
|
|
|
|
|
|
|
|
//slash pane
|
|
|
|
// 如果是Windows + JDK版本大于等于9时,一倍图启动会很模糊,这边使用两倍图
|
|
|
|
if (OperatingSystem.isWindows() && JdkVersion.GE_9.support()) {
|
|
|
|
this.splash = new SplashPane4WinAndJDK11();
|
|
|
|
} else {
|
|
|
|
this.splash = new SplashPane();
|
|
|
|
}
|
|
|
|
|
|
|
|
splash.setBackground(null);
|
|
|
|
this.setContentPane(splash);
|
|
|
|
this.setSize(splash.getSplashDimension());
|
|
|
|
|
|
|
|
this.setAlwaysOnTop(false);
|
|
|
|
this.setUndecorated(true);
|
|
|
|
//使窗体背景透明
|
|
|
|
if (OperatingSystem.isWindows()) {
|
|
|
|
this.setBackground(new Color(0, 0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
GUICoreUtils.centerWindow(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 设置任务栏图标,主要用于Windows
|
|
|
|
*/
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
private void initTitleIcon() {
|
|
|
|
try {
|
|
|
|
OemProcessor oemProcessor = OemHandler.findOem();
|
|
|
|
List<BufferedImage> image = null;
|
|
|
|
if (oemProcessor != null) {
|
|
|
|
try {
|
|
|
|
image = oemProcessor.createTitleIcon();
|
|
|
|
} catch (Throwable e) {
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (image == null) {
|
|
|
|
image = ICODecoder.read(SplashWindow.class
|
|
|
|
.getResourceAsStream("/com/fr/base/images/oem/logo.ico"));
|
|
|
|
}
|
|
|
|
this.setIconImages(image);
|
|
|
|
} catch (IOException e) {
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e);
|
|
|
|
this.setIconImage(IOUtils.readImage("/com/fr/base/images/oem/logo.png"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 注销窗口
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void dispose() {
|
|
|
|
super.dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 设置在启动过程中, 动态改变的文本, 如 当前启动的模块信息
|
|
|
|
*
|
|
|
|
* @param text 指定的文本
|
|
|
|
*/
|
|
|
|
void updateModuleLog(String text) {
|
|
|
|
splash.updateModuleLog(text);
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateThanksLog(String text) {
|
|
|
|
splash.updateThanksLog(text);
|
|
|
|
}
|
|
|
|
}
|