设计启动画面(java)

我想设计一个启动画面,可以显示当前加载过程的进度条,就像netbeans启动画面一样,如图所示

loading... modules, done!.... loading modules and so on 

加载完成后,主应用程序出现了。

我已经阅读了许多与仅创建启动画面相关的文章,但没有一篇文章涉及如何在启动画面上显示不同后台任务的进度。

我怎样才能做到这一点?

我可以将javafx 2用于启动画面,而应用程序的其余部分使用java编写

解决了!

我终于成功了。 我的错误是我正在更新任务线程中的GUI内容,因此我的任务线程被阻止,并且在GUI更新指令后无法执行下一条指令。现在我在任务完成后移动了那些更新GUI指令,并且它正在工作….感谢Jewelsea走正确的道路。

我之前为独立的JavaFX 2.0应用程序创建了一个启动页面示例 。

我更新了示例,以通过启动页面上的进度条和进度文本演示对加载进度的监视。

要调整代码以监视应用程序的初始化进度,而不是将ProgressBar绑定到WebEngine的loadWorker.workDone属性,请创建执行昂贵的初始化工作的JavaFX 任务 ,并通过Task的progressProperty和messageProperty监视任务的进度 。

以下是基于前一段中概述的任务方法的基于启动的示例的链接。

对于WebStart或浏览器嵌入式JavaFX应用程序,请使用assylias建议的预加载器。

如果使用java-web-start进行部署,则icon元素可以引用任何各种图像。 进度指示由jnlp客户端在下载期间处理。 优点是很早就在用户体验中进行干预。

稍后, SwingWorker可以在后台加载图像,如下所示。 worker的progress()方法可以通过PropertyChangeListener驱动JProgressBar ,如下所示。

使用预加载器显示应用程序初始化的进度似乎是您正在寻找的。

看一下Swing启动画面教程 ,其中包含一个示例,其中在启动画面上更新了一个进度条。 您可以轻松调整样本以更新某些文本。

您还使用java创建启动画面,

但是如果你想要更少的代码并且做更多的事情而不是使用JavaFx Splash屏幕组件。

为完整起见,如果要显示进度条。 引用SplashScreen javadoc :

一旦Swing / AWT显示第一个窗口,闪屏窗口就会自动关闭。

这意味着它不能使用标准的AWT / Swing组件(如JProgressBar ),但只能通过Graphics2D方法绘制(例如drawText()fillRect() ,…)。

所以你必须在一个单独的类中模拟一个进度条(代码是一个非常粗略的演示。你应该检查SplashScreen.isVisible() ):

 public class SplashProgressBar { SplashScreen splash; Graphics2D g; int x, y, w, h; // Drawing position in splash screen int val, max; // Progress bar value String text; // Text to display public SplashProgressBar(SplashScreen splash, int x, int y, int w, int h) { this.splash = splash; g = splash.createGraphics(); this.x = x; // this.y = y; etc this.val = 0; this.max = 100; } public void setMaximum(int n) { max = n; update(); } public void setValue(int n) { val = n; update(); } public void setString(String text) { this.text = text; update(); } public void update() { g.setColor(Color.WHITE); g.fillRect(x, y, w, h); g.setColor(Color.DARK_GRAY); g.drawRect(x, y, w, h); g.setColor(Color.ORANGE); g.fill3DRect(x, y, w * val / max, h, true); if (text != null) { g.setColor(Color.BLACK); g.drawString(text, x + (w - g.getFontMetrics().stringWidth(text)) / 2.0f, y + 8 - 2); // Use TextLayout to get precise text dimensions... } splash.update(); } } 

然后:

 // Drawn a scroll bar at (10;100) x (300x15) on the splash screen image (we know its size and where it would fit) SplashProgressBar spb = new SplashProgressBar(SplashScreen.getSplashScreen(), 10, 100, 300, 15); spb.setMaximum(processing.size()); for (int i = 0; i < processing.size(); i++) { spb.setValue(i); spb.setString("Processing #"+(i+1)); // Do the processing... }