From a4ff46856a7b1f76d523fa8d308152f997b0f345 Mon Sep 17 00:00:00 2001 From: skylarmt Date: Fri, 19 Dec 2014 17:55:00 -0700 Subject: [PATCH] Show better progress in splash screen --- .../apocalypselabs/symat/SplashScreen.form | 2 + .../apocalypselabs/symat/SplashScreen.java | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/net/apocalypselabs/symat/SplashScreen.form b/src/net/apocalypselabs/symat/SplashScreen.form index db0eefb..7d83700 100644 --- a/src/net/apocalypselabs/symat/SplashScreen.form +++ b/src/net/apocalypselabs/symat/SplashScreen.form @@ -63,6 +63,8 @@ + + diff --git a/src/net/apocalypselabs/symat/SplashScreen.java b/src/net/apocalypselabs/symat/SplashScreen.java index c44282f..3e44145 100644 --- a/src/net/apocalypselabs/symat/SplashScreen.java +++ b/src/net/apocalypselabs/symat/SplashScreen.java @@ -28,6 +28,7 @@ package net.apocalypselabs.symat; import javax.swing.ImageIcon; +import javax.swing.SwingUtilities; /** * @@ -71,6 +72,8 @@ public class SplashScreen extends javax.swing.JFrame { jProgressBar1.setMaximumSize(new java.awt.Dimension(32767, 20)); jProgressBar1.setMinimumSize(new java.awt.Dimension(10, 20)); jProgressBar1.setPreferredSize(new java.awt.Dimension(146, 20)); + jProgressBar1.setString(""); + jProgressBar1.setStringPainted(true); jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/splash.png"))); // NOI18N @@ -103,18 +106,73 @@ public class SplashScreen extends javax.swing.JFrame { @Override public void run() { + setProgress(10, "Starting up"); + DotThread dt = new DotThread(); + dt.start(); if (!MainGUI.skipPython) { // Python laggggsss when used for first time, this fixes the wait later. System.out.println("Warming up Python engine, to skip run with argument 'skippython'"); + setProgress(20, "Initializing Python engine"); try { CodeRunner python = new CodeRunner(true); } catch (Exception ex) { // Ignore } } + setProgress(70, "Loading main interface"); new MainGUI().setVisible(true); + dt.kill(); + setProgress(100, "Done!"); dispose(); } + + private void setProgress(int progress, String label) { + final int prog = progress; + final String lbl = label; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + jProgressBar1.setIndeterminate(false); + jProgressBar1.setValue(prog); + jProgressBar1.setString(lbl); + } + }); + } + + private class DotThread extends Thread { + + private boolean doRun = true; + + @Override + public void run() { + while (doRun) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + String val = jProgressBar1.getString(); + if (val.endsWith("...")) { + jProgressBar1.setString(val.replace("...", "")); + } else if (val.endsWith("..")) { + jProgressBar1.setString(val.replace("..", "...")); + } else if (val.endsWith(".")) { + jProgressBar1.setString(val.replace(".", "..")); + } else if (!val.endsWith(".")) { + jProgressBar1.setString(val+"."); + } + } + }); + try { + Thread.sleep(500); + } catch (InterruptedException ex) { + + } + } + } + + public void kill() { + doRun = false; + } + } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel5;