漏洞扫描小工具写完后,我打算给其增加一个启动界面,此处借鉴于 https://blog.csdn.net/yy873259480/article/details/7411383
界面组成为图片+进度条,代码如下:
package vul_scan;
import java.awt.Color;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
import javax.swing.JFrame;
import javax.swing.UIManager;
@SuppressWarnings("serial")
public class JWindowDemo extends JWindow implements Runnable {
// 定义加载窗口大小
public static final int LOAD_WIDTH = 455;
public static final int LOAD_HEIGHT = 295;
// 获取屏幕窗口大小
public static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
public static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
// 定义进度条组件
public JProgressBar progressbar;
// 定义标签组件
public JLabel label;
// 构造函数
public JWindowDemo() {
// 创建标签,并在标签上放置一张图片
//label = new JLabel(new ImageIcon("vul_scan.jpg"));//图片位于根目录
label = new JLabel(new ImageIcon("security.jpg"));//图片位于根目录
label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT - 15);
// 创建进度条
progressbar = new JProgressBar();
// 显示当前进度值信息
progressbar.setStringPainted(true);
// 设置进度条边框不显示
progressbar.setBorderPainted(false);
// 设置进度条的前景色
progressbar.setForeground(new Color(0, 210, 40));
// 设置进度条的背景色
progressbar.setBackground(new Color(188, 190, 194));
progressbar.setBounds(0, LOAD_HEIGHT - 15, LOAD_WIDTH, 15);
// 添加组件
this.add(label);
this.add(progressbar);
// 设置布局为空
this.setLayout(null);
// 设置窗口初始位置
this.setLocation((WIDTH - LOAD_WIDTH) / 2, (HEIGHT - LOAD_HEIGHT) / 2);
// 设置窗口大小
this.setSize(LOAD_WIDTH, LOAD_HEIGHT);
// 设置窗口显示
this.setVisible(true);
}
public static void main(String[] args) {
JWindowDemo t = new JWindowDemo();
new Thread(t).start();
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressbar.setValue(i);
}
JOptionPane.showMessageDialog(this, "加载完成");
this.dispose();
//以下为运行主程序+界面优化
// String outLookAndFeel ="com.jtattoo.plaf.mcwin.McWinLookAndFeel";
// try {
// UIManager.setLookAndFeel(outLookAndFeel);
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// new PortScannerFrame();
}
}
需要注意的一点:ImageIcon()函数中,加载的图片位置为根目录中的路径,而不是其绝对路径。