Tuesday, July 22, 2025

Java example animation Boot


# Java Swing Boot Animation Simulation

Here's a Java Swing application that simulates a computer booting process with a graphical boot screen:

```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BootAnimation extends JFrame {
    private JLabel bootLabel;
    private JProgressBar progressBar;
    private Timer timer;
    private int progressValue = 0;
    private String[] bootMessages = {
        "Initializing hardware...",
        "Loading BIOS...",
        "Checking memory...",
        "Detecting storage devices...",
        "Loading operating system...",
        "Starting services...",
        "Preparing desktop environment...",
        "Boot complete!"
    };
    private int currentMessageIndex = 0;

    public BootAnimation() {
        setTitle("System Boot Simulation");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setUndecorated(true); // Remove window decorations for full-screen effect
        setExtendedState(JFrame.MAXIMIZED_BOTH); // Start maximized
        
        // Set black background
        getContentPane().setBackground(Color.BLACK);
        setLayout(new BorderLayout());
        
        // Boot label with white text
        bootLabel = new JLabel("", SwingConstants.CENTER);
        bootLabel.setForeground(Color.WHITE);
        bootLabel.setFont(new Font("Monospaced", Font.PLAIN, 24));
        add(bootLabel, BorderLayout.CENTER);
        
        // Progress bar at bottom
        progressBar = new JProgressBar(0, 100);
        progressBar.setStringPainted(true);
        progressBar.setForeground(Color.GREEN);
        progressBar.setBackground(Color.BLACK);
        progressBar.setFont(new Font("Monospaced", Font.PLAIN, 14));
        add(progressBar, BorderLayout.SOUTH);
        
        // Create timer for boot animation
        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                updateBootProgress();
            }
        });
    }
    
    private void updateBootProgress() {
        if (currentMessageIndex < bootMessages.length) {
            bootLabel.setText(bootMessages[currentMessageIndex]);
            currentMessageIndex++;
        }
        
        progressValue += 10 + (int)(Math.random() * 5); // Random increment
        if (progressValue > 100) progressValue = 100;
        progressBar.setValue(progressValue);
        progressBar.setString(progressValue + "%");
        
        if (progressValue >= 100) {
            timer.stop();
            // After boot completes, show desktop or close after delay
            Timer closeTimer = new Timer(2000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    dispose();
                    // Here you would launch your main application
                    new DesktopEnvironment().setVisible(true);
                }
            });
            closeTimer.setRepeats(false);
            closeTimer.start();
        }
    }
    
    public void startBooting() {
        timer.start();
        setVisible(true);
    }
    
    // Simple desktop environment that would show after boot
    static class DesktopEnvironment extends JFrame {
        public DesktopEnvironment() {
            setTitle("Desktop Environment");
            setSize(800, 600);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            JLabel desktopLabel = new JLabel("Desktop Environment Loaded", SwingConstants.CENTER);
            desktopLabel.setFont(new Font("Arial", Font.BOLD, 24));
            add(desktopLabel);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new BootAnimation().startBooting();
            }
        });
    }
}
```

## Features of this Boot Animation:

1. **Full-screen boot screen** with black background (like real BIOS screens)
2. **Progressively displayed boot messages** that simulate different boot stages
3. **Animated progress bar** that shows boot completion percentage
4. **Automatic transition** to a "desktop environment" after boot completes
5. **Monospaced font** for authentic computer terminal look

## How to Enhance This Further:

1. **Add BIOS logo** at the beginning:
```java
// Add this to the constructor
JLabel logoLabel = new JLabel(new ImageIcon("bios_logo.png"));
add(logoLabel, BorderLayout.NORTH);
```

2. **Add POST beep sound**:
```java
Toolkit.getDefaultToolkit().beep(); // Add this at appropriate places
```

3. **More realistic timing** with varying delays between steps:
```java
// Replace the timer with variable delays
Timer messageTimer = new Timer(0, new ActionListener() {
    private int[] delays = {1500, 1200, 800, 2000, 2500, 1800, 1200, 1000};
    // ...
});
```

4. **Add hardware detection details**:
```java
String[][] detailedMessages = {
    {"CPU: Intel Core i7-9700K @ 3.60GHz", "Memory: 32768MB OK"},
    // ... more hardware info
};
```

5. **Make it interactive** (press ESC to enter BIOS setup):
```java
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "enterBIOS");
getRootPane().getActionMap().put("enterBIOS", new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        showBiosSetup();
    }
});
```

Would you like me to explain any part in more detail or add any specific features to this boot animation?

No comments: