以下是上述应用程序的代码(包括2个类:Main和ClockPanel)
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Clock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLayout(new GridLayout(1, 1));
ClockPanel clock = new ClockPanel();
frame.add(clock);
frame.setVisible(true);
});
}
}
public class ClockPanel extends JPanel implements ActionListener {
private JLabel timeValue;
private JButton runButton;
private JButton pauseButton;
private JButton resetButton;
private boolean isRunning;
private int seconds;
public ClockPanel() {
timeValue = new JLabel("0");
setBorder(BorderFactory.createLineBorder(Color.BLACK));
setAlignmentX(Component.CENTER_ALIGNMENT);
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
initButtons();
// create panel to display the clocks
JPanel timePanel = new JPanel();
timePanel.setLayout(new BoxLayout(timePanel, BoxLayout.X_AXIS));
timePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel timeLabel = new JLabel("Value");
timePanel.add(timeLabel);
timePanel.add(Box.createRigidArea(new Dimension(30, 0)));
timePanel.add(timeValue);
add(timePanel);
add(Box.createRigidArea(new Dimension(0, 20)));
// create panel to display the buttons
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
buttonPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonPanel.add(runButton);
buttonPanel.add(Box.createRigidArea(new Dimension(30, 0)));
buttonPanel.add(pauseButton);
buttonPanel.add(Box.createRigidArea(new Dimension(30, 0)));
buttonPanel.add(resetButton);
add(buttonPanel);
// create thread to run the clock
Thread clockThread = new Thread(() -> {
seconds = -1;
while (true) {
// System.out.println(); // if this line is removed, the clock will not run
if (isRunning) {
try {
seconds++;
timeValue.setText(String.valueOf(seconds));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
clockThread.start();
}
private void initButtons() {
runButton = new JButton("Run");
pauseButton = new JButton("Pause");
resetButton = new JButton("Reset");
runButton.addActionListener(this);
pauseButton.addActionListener(this);
resetButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == runButton) {
isRunning = true;
runButton.setEnabled(false);
pauseButton.setEnabled(true);
resetButton.setEnabled(false);
} else if (e.getSource() == pauseButton) {
isRunning = false;
runButton.setEnabled(true);
pauseButton.setEnabled(false);
resetButton.setEnabled(true);
} else if (e.getSource() == resetButton) {
isRunning = false;
timeValue.setText("0");
seconds = 0;
runButton.setEnabled(true);
pauseButton.setEnabled(false);
resetButton.setEnabled(false);
}
}
}
问题是:如果我删除该行系统。出来println()
(正如我在上面的代码中所评论的那样),时钟将不会运行。我完全不知道为什么会这样。有人能给我解释一下吗?是因为系统。出来println()影响正在运行的线程或其他什么?
isRun
不是易失性
,因此每个线程看到的值都可能发散。当值为false
时,您有一个循环只会旋转,并且没有理由去检查“真实”值是否发生了变化。
注意,您不应该(直接或间接地)在AWT事件调度线程(EDT)之外使用Swing组件。
简单的修复方法是使isRunning变为volatile,并使用EventQueue。invokeLater调用时间值。setText。
最好用javax完全取代clockThread。摆动计时器(而不是java.util.Timer),但这可能没有抓住重点。至少让时钟线程等待运行更改。
有两种执行指令的机制。 单时钟周期实现 管道 在MIPS体系结构(摘自《计算机组织与设计》一书)中,教学分为5个阶段。 因此,在单时钟周期实现中,这意味着在一个时钟周期内,一条指令执行5个阶段。 例如,加载指令(有5个阶段)在一个时钟周期内执行。因此,在这一个时钟周期之后可以执行其他指令。让我们假设一个时钟周期是10秒。 现在,在流水线中,多条指令可以重叠。与上面示例中的一个时钟周期的时间相比,我
问题内容: 我正在尝试使用摆陀制作秒表,但无法正常工作。这是我的代码。Jlabel时钟始终显示-1,只有在它停止时才发生。我是否正确使用了invokelater? 工作代码 问题答案: 您的课程运行一次,然后终止… 线程将在存在于其方法时终止,在本例中为您的方法。 你需要做的,什么是维持一个循环,直到变成 尽管使用… 会更简单… 然后,您可以从中剥离功能(即)
时钟中断 本章的最后,我们来实现操作系统中极其重要的时钟中断。时钟中断是操作系统能够进行线程调度的基础,操作系统会在每次时钟中断时被唤醒,暂停正在执行的线程,并根据调度算法选择下一个应当运行的线程。 [info] RISC-V 中断寄存器的细分 在前面提到,sie 和 sip 寄存器分别保存不同中断种类的使能和触发记录。例如,软件中断的使能是 sie 中的 SSIE 位,触发记录是 sip 中的
本文向大家介绍纯js+css实现在线时钟,包括了纯js+css实现在线时钟的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js+css实现在线时钟的具体代码,供大家参考,具体内容如下 实现要点 1、transform-origin的基本点的应用 2、批量处理html和样式的信息 3、指证位置进行了优化(时针与小时和分针位置有关,分针与分和秒针位置有关)。 新增居中方式: 开启绝对定位
问题内容: 我读了这句话: 主线程必须是完成执行的最后一个线程。当主线程停止时,程序终止。 是真的吗 我也知道“即使主线程死程序继续运行”。 据我了解:启动程序时,JVM创建一个线程来运行您的程序。JVM创建一个用于运行程序的用户线程。该线程称为主线程。该类的main方法是从主线程调用的。如果程序从主线程中产生新线程,它将停止直到最后一个线程死亡。 哪一个是对的? 问题答案: 当所有非守护程序线程
问题内容: 我正在制作一个分布式Java应用程序,我需要该应用程序的两个部分都可以在一个标准时间运行。由于系统时间可能不同,我在想Java API是否包含某个类来从标准在线源下载时间? 问题答案: 您需要使用NTP(网络时间协议): http://en.wikipedia.org/wiki/Network_Time_Protocol 以下链接包含一些参考Java NTP客户端代码,用于与NTP服务