{"id":2214,"date":"2024-11-24T12:05:10","date_gmt":"2024-11-24T12:05:10","guid":{"rendered":"https:\/\/www.w3computing.com\/articles\/?p=2214"},"modified":"2024-11-24T12:05:13","modified_gmt":"2024-11-24T12:05:13","slug":"how-to-create-a-simple-stopwatch-program-in-java","status":"publish","type":"post","link":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/","title":{"rendered":"How to Create a Simple Stopwatch Program in Java"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A stopwatch is a common tool used to measure the time between two events. Creating a stopwatch program in Java is a fantastic project for beginner to intermediate developers to hone their skills in programming, particularly in working with GUIs (Graphical User Interfaces), event handling, and threading. In this step-by-step tutorial, you\u2019ll learn how to create a simple stopwatch program in Java from scratch.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before we start coding, ensure you have the following setup on your system:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Java Development Kit (JDK)<\/strong>: Ensure that JDK is installed on your machine. You can download it from <a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase-downloads.html\">Oracle&#8217;s official website<\/a>.<\/li>\n\n\n\n<li><strong>IDE or Text Editor<\/strong>: Use an IDE like IntelliJ IDEA, Eclipse, or NetBeans, or a text editor like VS Code or Notepad++.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Setting Up the Project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first step is to set up your project. Open your IDE or text editor and create a new Java project.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a folder for your project (if not using an IDE).<\/li>\n\n\n\n<li>Inside this folder, create a file named <code>Stopwatch.java<\/code>. This will be our main program file.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Plan the Program<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before jumping into the code, let\u2019s break down the features we want in our stopwatch:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A GUI with the following:<\/li>\n\n\n\n<li>A label to display the elapsed time.<\/li>\n\n\n\n<li>Three buttons: Start, Stop, and Reset.<\/li>\n\n\n\n<li>The ability to track time accurately.<\/li>\n\n\n\n<li>Proper threading to ensure the program remains responsive while running.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Import Required Libraries<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We need Java Swing for GUI components and some utility classes for managing time. Add the following imports at the top of the <code>Stopwatch.java<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">import<\/span> javax.swing.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.event.ActionEvent;\n<span class=\"hljs-keyword\">import<\/span> java.awt.event.ActionListener;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Create the Stopwatch Class<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our program\u2019s main class will be <code>Stopwatch<\/code>, and it will extend <code>JFrame<\/code> to represent a GUI window. Let\u2019s set up the basic structure:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Stopwatch<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JFrame<\/span> <\/span>{\n\n    <span class=\"hljs-comment\">\/\/ Declare variables for time tracking<\/span>\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">long<\/span> startTime;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">long<\/span> elapsedTime;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">boolean<\/span> running;\n\n    <span class=\"hljs-comment\">\/\/ Declare GUI components<\/span>\n    <span class=\"hljs-keyword\">private<\/span> JLabel timeDisplay;\n    <span class=\"hljs-keyword\">private<\/span> JButton startButton;\n    <span class=\"hljs-keyword\">private<\/span> JButton stopButton;\n    <span class=\"hljs-keyword\">private<\/span> JButton resetButton;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Stopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-comment\">\/\/ Constructor to initialize the GUI<\/span>\n        setTitle(<span class=\"hljs-string\">\"Stopwatch\"<\/span>);\n        setSize(<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-number\">200<\/span>);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setLayout(<span class=\"hljs-keyword\">new<\/span> BorderLayout());\n\n        initComponents();\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Initialize GUI Components<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the <code>Stopwatch<\/code> constructor, create a method <code>initComponents()<\/code> to add and configure the GUI components.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">initComponents<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Initialize components<\/span>\n    timeDisplay = <span class=\"hljs-keyword\">new<\/span> JLabel(<span class=\"hljs-string\">\"00:00:00\"<\/span>, SwingConstants.CENTER);\n    timeDisplay.setFont(<span class=\"hljs-keyword\">new<\/span> Font(<span class=\"hljs-string\">\"Arial\"<\/span>, Font.BOLD, <span class=\"hljs-number\">30<\/span>));\n\n    startButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Start\"<\/span>);\n    stopButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Stop\"<\/span>);\n    resetButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Reset\"<\/span>);\n\n    <span class=\"hljs-comment\">\/\/ Add components to the frame<\/span>\n    JPanel buttonPanel = <span class=\"hljs-keyword\">new<\/span> JPanel();\n    buttonPanel.setLayout(<span class=\"hljs-keyword\">new<\/span> GridLayout(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">3<\/span>));\n    buttonPanel.add(startButton);\n    buttonPanel.add(stopButton);\n    buttonPanel.add(resetButton);\n\n    add(timeDisplay, BorderLayout.CENTER);\n    add(buttonPanel, BorderLayout.SOUTH);\n\n    <span class=\"hljs-comment\">\/\/ Disable stop and reset buttons initially<\/span>\n    stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n    resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This method initializes the components and lays them out using a simple grid layout for buttons and a central label for the time display.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Add Functionality to Buttons<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now let\u2019s add event listeners to our buttons. Update the <code>Stopwatch<\/code> constructor to include calls to methods that will handle the button actions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Start Button<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The start button should begin the stopwatch. We use a separate thread to update the time without freezing the GUI.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">startStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    startButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n        <span class=\"hljs-meta\">@Override<\/span>\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span> <\/span>{\n            startTime = System.currentTimeMillis() - elapsedTime;\n            running = <span class=\"hljs-keyword\">true<\/span>;\n\n            <span class=\"hljs-comment\">\/\/ Enable\/disable buttons<\/span>\n            startButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n            stopButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n            resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n\n            <span class=\"hljs-comment\">\/\/ Create a new thread to update the time display<\/span>\n            <span class=\"hljs-keyword\">new<\/span> Thread(() -&gt; {\n                <span class=\"hljs-keyword\">while<\/span> (running) {\n                    elapsedTime = System.currentTimeMillis() - startTime;\n                    updateDisplay();\n                    <span class=\"hljs-keyword\">try<\/span> {\n                        Thread.sleep(<span class=\"hljs-number\">100<\/span>); <span class=\"hljs-comment\">\/\/ Update every 100ms<\/span>\n                    } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException ex) {\n                        ex.printStackTrace();\n                    }\n                }\n            }).start();\n        }\n    });\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Stop Button<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The stop button pauses the stopwatch.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">stopStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    stopButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n        <span class=\"hljs-meta\">@Override<\/span>\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span> <\/span>{\n            running = <span class=\"hljs-keyword\">false<\/span>;\n\n            <span class=\"hljs-comment\">\/\/ Enable\/disable buttons<\/span>\n            startButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n            stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n            resetButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n        }\n    });\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Reset Button<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The reset button resets the stopwatch to its initial state.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">resetStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    resetButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n        <span class=\"hljs-meta\">@Override<\/span>\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span> <\/span>{\n            running = <span class=\"hljs-keyword\">false<\/span>;\n            elapsedTime = <span class=\"hljs-number\">0<\/span>;\n            updateDisplay();\n\n            <span class=\"hljs-comment\">\/\/ Enable\/disable buttons<\/span>\n            startButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n            stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n            resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n        }\n    });\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Update the Display<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>updateDisplay<\/code> method converts the elapsed time in milliseconds to a formatted string and updates the <code>timeDisplay<\/code> label.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">updateDisplay<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">int<\/span> seconds = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ <span class=\"hljs-number\">1000<\/span>) % <span class=\"hljs-number\">60<\/span>;\n    <span class=\"hljs-keyword\">int<\/span> minutes = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ (<span class=\"hljs-number\">1000<\/span> * <span class=\"hljs-number\">60<\/span>)) % <span class=\"hljs-number\">60<\/span>;\n    <span class=\"hljs-keyword\">int<\/span> hours = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ (<span class=\"hljs-number\">1000<\/span> * <span class=\"hljs-number\">60<\/span> * <span class=\"hljs-number\">60<\/span>));\n\n    String timeString = String.format(<span class=\"hljs-string\">\"%02d:%02d:%02d\"<\/span>, hours, minutes, seconds);\n    timeDisplay.setText(timeString);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Initialize the Button Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the <code>Stopwatch<\/code> constructor, call the methods to initialize the button actions:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Stopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    setTitle(<span class=\"hljs-string\">\"Stopwatch\"<\/span>);\n    setSize(<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-number\">200<\/span>);\n    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n    setLayout(<span class=\"hljs-keyword\">new<\/span> BorderLayout());\n\n    initComponents();\n    startStopwatch();\n    stopStopwatch();\n    resetStopwatch();\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Main Method to Launch the Program<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, create a <code>main<\/code> method to run the program:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n    SwingUtilities.invokeLater(() -&gt; {\n        Stopwatch stopwatch = <span class=\"hljs-keyword\">new<\/span> Stopwatch();\n        stopwatch.setVisible(<span class=\"hljs-keyword\">true<\/span>);\n    });\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Complete Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the complete code for the stopwatch program:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">import<\/span> javax.swing.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.*;\n<span class=\"hljs-keyword\">import<\/span> java.awt.event.ActionEvent;\n<span class=\"hljs-keyword\">import<\/span> java.awt.event.ActionListener;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Stopwatch<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JFrame<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">long<\/span> startTime;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">long<\/span> elapsedTime;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">boolean<\/span> running;\n\n    <span class=\"hljs-keyword\">private<\/span> JLabel timeDisplay;\n    <span class=\"hljs-keyword\">private<\/span> JButton startButton;\n    <span class=\"hljs-keyword\">private<\/span> JButton stopButton;\n    <span class=\"hljs-keyword\">private<\/span> JButton resetButton;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Stopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        setTitle(<span class=\"hljs-string\">\"Stopwatch\"<\/span>);\n        setSize(<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-number\">200<\/span>);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setLayout(<span class=\"hljs-keyword\">new<\/span> BorderLayout());\n\n        initComponents();\n        startStopwatch();\n        stopStopwatch();\n        resetStopwatch();\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">initComponents<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        timeDisplay = <span class=\"hljs-keyword\">new<\/span> JLabel(<span class=\"hljs-string\">\"00:00:00\"<\/span>, SwingConstants.CENTER);\n        timeDisplay.setFont(<span class=\"hljs-keyword\">new<\/span> Font(<span class=\"hljs-string\">\"Arial\"<\/span>, Font.BOLD, <span class=\"hljs-number\">30<\/span>));\n\n        startButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Start\"<\/span>);\n        stopButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Stop\"<\/span>);\n        resetButton = <span class=\"hljs-keyword\">new<\/span> JButton(<span class=\"hljs-string\">\"Reset\"<\/span>);\n\n        JPanel buttonPanel = <span class=\"hljs-keyword\">new<\/span> JPanel();\n        buttonPanel.setLayout(<span class=\"hljs-keyword\">new<\/span> GridLayout(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">3<\/span>));\n        buttonPanel.add(startButton);\n        buttonPanel.add(stopButton);\n        buttonPanel.add(resetButton);\n\n        add(timeDisplay, BorderLayout.CENTER);\n        add(buttonPanel, BorderLayout.SOUTH);\n\n        stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n        resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">startStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        startButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n            <span class=\"hljs-meta\">@Override<\/span>\n            <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span> <\/span>{\n                startTime = System.currentTimeMillis() - elapsedTime;\n                running = <span class=\"hljs-keyword\">true<\/span>;\n\n                startButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n                stopButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n                resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n\n                <span class=\"hljs-keyword\">new<\/span> Thread(() -&gt; {\n                    <span class=\"hljs-keyword\">while<\/span> (running) {\n                        elapsedTime = System.currentTimeMillis() - startTime;\n                        updateDisplay();\n                        <span class=\"hljs-keyword\">try<\/span> {\n                            Thread.sleep(<span class=\"hljs-number\">100<\/span>);\n                        } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException ex) {\n                            ex.printStackTrace();\n                        }\n                    }\n                }).start();\n            }\n        });\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">stopStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        stopButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n            <span class=\"hljs-meta\">@Override<\/span>\n            <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span> <\/span>{\n                running = <span class=\"hljs-keyword\">false<\/span>;\n\n                startButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n                stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n                resetButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n            }\n        });\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">resetStopwatch<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        resetButton.addActionListener(<span class=\"hljs-keyword\">new<\/span> ActionListener() {\n            <span class=\"hljs-meta\">@Override<\/span>\n            <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">actionPerformed<\/span><span class=\"hljs-params\">(ActionEvent e)<\/span>\n\n <\/span>{\n                running = <span class=\"hljs-keyword\">false<\/span>;\n                elapsedTime = <span class=\"hljs-number\">0<\/span>;\n                updateDisplay();\n\n                startButton.setEnabled(<span class=\"hljs-keyword\">true<\/span>);\n                stopButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n                resetButton.setEnabled(<span class=\"hljs-keyword\">false<\/span>);\n            }\n        });\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">updateDisplay<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">int<\/span> seconds = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ <span class=\"hljs-number\">1000<\/span>) % <span class=\"hljs-number\">60<\/span>;\n        <span class=\"hljs-keyword\">int<\/span> minutes = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ (<span class=\"hljs-number\">1000<\/span> * <span class=\"hljs-number\">60<\/span>)) % <span class=\"hljs-number\">60<\/span>;\n        <span class=\"hljs-keyword\">int<\/span> hours = (<span class=\"hljs-keyword\">int<\/span>) (elapsedTime \/ (<span class=\"hljs-number\">1000<\/span> * <span class=\"hljs-number\">60<\/span> * <span class=\"hljs-number\">60<\/span>));\n\n        String timeString = String.format(<span class=\"hljs-string\">\"%02d:%02d:%02d\"<\/span>, hours, minutes, seconds);\n        timeDisplay.setText(timeString);\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        SwingUtilities.invokeLater(() -&gt; {\n            Stopwatch stopwatch = <span class=\"hljs-keyword\">new<\/span> Stopwatch();\n            stopwatch.setVisible(<span class=\"hljs-keyword\">true<\/span>);\n        });\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Testing The Program<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Open a Terminal or Command Prompt<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Navigate to the directory where the <code>Stopwatch.java<\/code> file is saved. For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Windows<\/strong>: Open Command Prompt, then use the <code>cd<\/code> command:bashCopy code<code>cd path\\to\\directory<\/code><\/li>\n\n\n\n<li><strong>Mac\/Linux<\/strong>: Open Terminal, then use the <code>cd<\/code> command:bashCopy code<code>cd \/path\/to\/directory<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Compile the Code<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Compile the Java program using the <code>javac<\/code> command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">javac Stopwatch.java\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>If the compilation is successful, it will generate a <code>Stopwatch.class<\/code> file in the same directory.<\/li>\n\n\n\n<li>If there are errors, double-check the code for typos or syntax mistakes.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Run the Program<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run the compiled program using the <code>java<\/code> command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">java Stopwatch<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This will launch the stopwatch application with a GUI.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Using an IDE<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re using an IDE like IntelliJ IDEA, Eclipse, or NetBeans, follow these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create a New Project<\/strong>:\n<ul class=\"wp-block-list\">\n<li>In your IDE, create a new Java project.<\/li>\n\n\n\n<li>Place the <code>Stopwatch.java<\/code> file in the <code>src<\/code> directory of the project.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Run the Program<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Locate the <code>Stopwatch<\/code> class in the IDE.<\/li>\n\n\n\n<li>Right-click on the file (or the class name) and choose <strong>Run<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Expected Behavior<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the program runs, a window will open displaying:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A large time label (<code>00:00:00<\/code>).<\/li>\n\n\n\n<li>Three buttons: <strong>Start<\/strong>, <strong>Stop<\/strong>, and <strong>Reset<\/strong>.<\/li>\n<\/ol>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a21d67a37e71&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a21d67a37e71\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"193\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png\" alt=\"Java Stopwatch Program\" class=\"wp-image-2216\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click <strong>Start<\/strong> to begin timing.<\/li>\n\n\n\n<li>Click <strong>Stop<\/strong> to pause.<\/li>\n\n\n\n<li>Click <strong>Reset<\/strong> to reset the timer.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You\u2019ve now built a fully functional stopwatch program in Java! This project helped you practice:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using Swing to create GUIs.<\/li>\n\n\n\n<li>Handling button events with <code>ActionListener<\/code>.<\/li>\n\n\n\n<li>Implementing threading for time updates.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Feel free to expand this program by adding features such as lap timers or exporting results to a file.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A stopwatch is a common tool used to measure the time between two events. Creating a stopwatch program in Java is a fantastic project for beginner to intermediate developers to hone their skills in programming, particularly in working with GUIs (Graphical User Interfaces), event handling, and threading. In this step-by-step tutorial, you\u2019ll learn how to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5,4],"tags":[],"class_list":["post-2214","post","type-post","status-publish","format-standard","category-java","category-programming-languages","entry","has-post-thumbnail"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Create a Simple Stopwatch Program in Java<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Create a Simple Stopwatch Program in Java\" \/>\n<meta property=\"og:description\" content=\"A stopwatch is a common tool used to measure the time between two events. Creating a stopwatch program in Java is a fantastic project for beginner to intermediate developers to hone their skills in programming, particularly in working with GUIs (Graphical User Interfaces), event handling, and threading. In this step-by-step tutorial, you\u2019ll learn how to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-24T12:05:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-24T12:05:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png\" \/>\n\t<meta property=\"og:image:width\" content=\"286\" \/>\n\t<meta property=\"og:image:height\" content=\"193\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"w3compadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3compadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/\"},\"author\":{\"name\":\"w3compadmin\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"headline\":\"How to Create a Simple Stopwatch Program in Java\",\"datePublished\":\"2024-11-24T12:05:10+00:00\",\"dateModified\":\"2024-11-24T12:05:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/\"},\"wordCount\":705,\"image\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/java-stopwatch-program.png\",\"articleSection\":[\"Java\",\"Programming Languages\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/\",\"name\":\"How to Create a Simple Stopwatch Program in Java\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/java-stopwatch-program.png\",\"datePublished\":\"2024-11-24T12:05:10+00:00\",\"dateModified\":\"2024-11-24T12:05:13+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/java-stopwatch-program.png\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/java-stopwatch-program.png\",\"width\":286,\"height\":193},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-create-a-simple-stopwatch-program-in-java\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Articles Home\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programming Languages\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/programming-languages\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Create a Simple Stopwatch Program in Java\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\",\"name\":\"Developer Articles Hub\",\"description\":\"\",\"alternateName\":\"Developer Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\",\"name\":\"w3compadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"caption\":\"w3compadmin\"},\"sameAs\":[\"http:\\\/\\\/w3computing.com\\\/articles\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Create a Simple Stopwatch Program in Java","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/","og_locale":"en_US","og_type":"article","og_title":"How to Create a Simple Stopwatch Program in Java","og_description":"A stopwatch is a common tool used to measure the time between two events. Creating a stopwatch program in Java is a fantastic project for beginner to intermediate developers to hone their skills in programming, particularly in working with GUIs (Graphical User Interfaces), event handling, and threading. In this step-by-step tutorial, you\u2019ll learn how to [&hellip;]","og_url":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/","article_published_time":"2024-11-24T12:05:10+00:00","article_modified_time":"2024-11-24T12:05:13+00:00","og_image":[{"width":286,"height":193,"url":"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png","type":"image\/png"}],"author":"w3compadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3compadmin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#article","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/"},"author":{"name":"w3compadmin","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"headline":"How to Create a Simple Stopwatch Program in Java","datePublished":"2024-11-24T12:05:10+00:00","dateModified":"2024-11-24T12:05:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/"},"wordCount":705,"image":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png","articleSection":["Java","Programming Languages"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/","url":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/","name":"How to Create a Simple Stopwatch Program in Java","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#primaryimage"},"image":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png","datePublished":"2024-11-24T12:05:10+00:00","dateModified":"2024-11-24T12:05:13+00:00","author":{"@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"breadcrumb":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#primaryimage","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/uploads\/2024\/11\/java-stopwatch-program.png","width":286,"height":193},{"@type":"BreadcrumbList","@id":"https:\/\/www.w3computing.com\/articles\/how-to-create-a-simple-stopwatch-program-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Articles Home","item":"https:\/\/www.w3computing.com\/articles\/"},{"@type":"ListItem","position":2,"name":"Programming Languages","item":"https:\/\/www.w3computing.com\/articles\/programming-languages\/"},{"@type":"ListItem","position":3,"name":"How to Create a Simple Stopwatch Program in Java"}]},{"@type":"WebSite","@id":"https:\/\/www.w3computing.com\/articles\/#website","url":"https:\/\/www.w3computing.com\/articles\/","name":"Developer Articles Hub","description":"","alternateName":"Developer Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.w3computing.com\/articles\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561","name":"w3compadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","caption":"w3compadmin"},"sameAs":["http:\/\/w3computing.com\/articles"]}]}},"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"w3compadmin","author_link":"https:\/\/www.w3computing.com\/articles\/author\/w3compadmin\/"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/comments?post=2214"}],"version-history":[{"count":3,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2214\/revisions"}],"predecessor-version":[{"id":2218,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2214\/revisions\/2218"}],"wp:attachment":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/media?parent=2214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/categories?post=2214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/tags?post=2214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}