import java.awt.*; import javax.swing.*; public class Denko extends JPanel implements Runnable { private JLabel label; private volatile Thread thread = null; private String msg = "0123456789ABCDEF "; public Denko() { label = new JLabel(msg); add(label); JButton startBtn = new JButton("start"); startBtn.addActionListener(e -> startThread()); JButton stopBtn = new JButton("stop"); stopBtn.addActionListener(e -> stopThread()); setLayout(new FlowLayout()); add(startBtn); add(stopBtn); startThread(); } private void startThread() { if (thread == null) { thread = new Thread(this); thread.start(); } } private void stopThread() { thread = null; } public void run() { Thread thisThread = Thread.currentThread(); for (int i = 0; thread == thisThread; i = (i + 1) % msg.length()) { String str = msg.substring(i) + msg.substring(0, i); SwingUtilities.invokeLater(() -> label.setText(str)); try { Thread.sleep(100); // 100 ミリ秒お休み } catch (InterruptedException e) {} } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("電光掲示板"); frame.add(new Denko()); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); }); } }