使用进度条(如Eclipse)制作启动屏幕

我的主类从文件加载配置,然后显示一个框架。我想制作一个带有进度条(如Eclipse)的启动画面,以便在加载文件时进度会增加,并且在加载文件后启动画面会消失。然后我的主机被加载。

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext(

"classpath:/META-INF/spring/applicationContext.xml");

// splash with progress load till this file is loaded

UserDao userDao = context.getBean(UserDao.class);

isRegistered = userDao.isRegistered();

System.out.println("registered: " + isRegistered);

if (isRegistered) {

// progress finish and hide splash

log.debug("user is registered"); // show frame1

} else {

// progress finish and hide splash

log.debug("user is not registered"); // show frame2

}

}

我在Swing方面没有太多经验,所以请提出建议。

我发现了以下示例,但没有什么问题:

  • 当计数器达到指定的数字时,它应停止在(300)位置,直到不停止计时器并隐藏启动画面而永远计数。

  • 我想将计数器绑定到文件加载,因此,在加载文件时,将加载进度,直到加载文件,然后进度完成,并且初始屏幕消失。

    @SuppressWarnings("serial")

    @Component

    public class SplashScreen extends JWindow {

    static boolean isRegistered;

    static Log log = LogFactory.getLog(SplashScreen.class);

    private static JProgressBar progressBar = new JProgressBar();

    private static SplashScreen execute;

    private static int count;

    private static Timer timer1;

    public SplashScreen() {

    Container container = getContentPane();

    container.setLayout(null);

    JPanel panel = new JPanel();

    panel.setBorder(new javax.swing.border.EtchedBorder());

    panel.setBackground(new Color(255, 255, 255));

    panel.setBounds(10, 10, 348, 150);

    panel.setLayout(null);

    container.add(panel);

    JLabel label = new JLabel("Hello World!");

    label.setFont(new Font("Verdana", Font.BOLD, 14));

    label.setBounds(85, 25, 280, 30);

    panel.add(label);

    progressBar.setMaximum(50);

    progressBar.setBounds(55, 180, 250, 15);

    container.add(progressBar);

    loadProgressBar();

    setSize(370, 215);

    setLocationRelativeTo(null);

    setVisible(true);

    }

    public void loadProgressBar() {

    ActionListener al = new ActionListener() {

    public void actionPerformed(java.awt.event.ActionEvent evt) {

    count++;

    progressBar.setValue(count);

    if (count == 300) {

    timer1.stop();

    execute.setVisible(false);

    return;

    }

    }

    };

    timer1 = new Timer(50, al);

    timer1.start();

    }

    public static void main(String[] args) {

    execute = new SplashScreen();

    ApplicationContext context = new ClassPathXmlApplicationContext(

    "classpath:/META-INF/spring/applicationContext.xml");

    UserDao userDao = context.getBean(UserDao.class);

    isRegistered = userDao.isRegistered();

    if (isRegistered) {

    // show frame 1

    } else {

    // show frame 2

    }

    }

    }

回答:

当计数器达到指定的数字时,它应停止在(300)位置,直到不停止计时器并隐藏启动画面时,它一直保持计数。

下面的代码似乎很好用(存在致命缺陷,计数器可能花费比文件加载更长的时间,反之亦然):

import java.awt.Color;

import java.awt.Container;

import java.awt.Font;

import java.awt.HeadlessException;

import java.awt.event.ActionListener;

import javax.swing.*;

public class SplashScreen extends JWindow {

static boolean isRegistered;

private static JProgressBar progressBar = new JProgressBar();

private static SplashScreen execute;

private static int count;

private static Timer timer1;

public SplashScreen() {

Container container = getContentPane();

container.setLayout(null);

JPanel panel = new JPanel();

panel.setBorder(new javax.swing.border.EtchedBorder());

panel.setBackground(new Color(255, 255, 255));

panel.setBounds(10, 10, 348, 150);

panel.setLayout(null);

container.add(panel);

JLabel label = new JLabel("Hello World!");

label.setFont(new Font("Verdana", Font.BOLD, 14));

label.setBounds(85, 25, 280, 30);

panel.add(label);

progressBar.setMaximum(50);

progressBar.setBounds(55, 180, 250, 15);

container.add(progressBar);

loadProgressBar();

setSize(370, 215);

setLocationRelativeTo(null);

setVisible(true);

}

private void loadProgressBar() {

ActionListener al = new ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

count++;

progressBar.setValue(count);

System.out.println(count);

if (count == 300) {

createFrame();

execute.setVisible(false);//swapped this around with timer1.stop()

timer1.stop();

}

}

private void createFrame() throws HeadlessException {

JFrame frame = new JFrame();

frame.setSize(500, 500);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

};

timer1 = new Timer(50, al);

timer1.start();

}

public static void main(String[] args) {

execute = new SplashScreen();

}

};

我想将计数器绑定到文件加载,因此,在加载文件时,将加载进度,直到加载文件,然后进度完成,并且初始屏幕消失。

您应该查看一下,ProgressMonitor然后ProgressMonitorInputStream使用,Task然后检查何时完全读取了文件并结束SplashScreen。看到这里一些很好的教程和解释

以上是 使用进度条(如Eclipse)制作启动屏幕 的全部内容, 来源链接: utcz.com/qa/402668.html

回到顶部