此代码应创建一个框架,其中包含一个打印出时钟的标签。 zeitLaeuft()
方法使时钟工作,并且通过按钮“start”,时钟开始运行。当我调用方法 zeitLaeuft()
时,代码失败。我尝试了一些方法,现在我知道这是由于标签 jLUhr
造成的。在方法 zeitLaeuft()
中,调用方法 jLUhr.setText()
的两个命令失败。我尝试设置标签文本并注释掉该方法,但它不起作用。
问题是什么?
package uhr;
import javax.swing.*;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.util.concurrent.TimeUnit;
public class Uhr1 extends javax.swing.JFrame {
public Uhr1() {
super();
initGUI();
}
private static JLabel jLUhr;
private static JButton jBtnStart;
private static int stunden = 0, minuten = 0;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Uhr1 uhr = new Uhr1();
uhr.setVisible(true);
uhr.setLocationRelativeTo(null);
}
});
}
public void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setTitle("Uhr");
getContentPane().setLayout(null);
{
JLabel jLUhr = new JLabel(); //Uhr = clock in german
add(jLUhr);
jLUhr.setBounds(49, 89, 300, 100);
jLUhr.setHorizontalAlignment(SwingConstants.CENTER);
jLUhr.setVerticalAlignment(SwingConstants.CENTER);
}
{
JButton jBtnStart = new JButton();
add(jBtnStart);
jBtnStart.setBounds(49, 219, 80, 30);
jBtnStart.setText("Start");
jBtnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
start(evt);
}
});
}
pack();
setSize(400,300);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void zeitLaeuft() {
while(true) {
if(minuten < 60) {
int i;
try {
for(i = 0; i < 60; i++){
jLUhr.setText(Integer.toString(stunden) + " : " + Integer.toString(minuten)); //this is where the code fails
TimeUnit.SECONDS.sleep(1);
jLUhr.setText(Integer.toString(stunden) + " " + Integer.toString(minuten)); //this is where the code fails
}
minuten++;
i = 0;
} catch (Exception e) {
e.printStackTrace();
}
}
else if(minuten == 60) {
minuten = 0;
if(stunden < 24) {
stunden ++;
}
else {
stunden = 0;
}
}
}
}
public void start(ActionEvent evt) {
zeitLaeuft(); //this is where the code fails
}
}
最佳答案
这个:
JLabel jLUhr = new JLabel(); //Uhr = clock in german
...声明 & 创建一个局部变量,其作用域在方法结束时丢失。应该是:
jLUhr = new JLabel(); //Uhr = clock in german
这是访问全局变量。
关于java - JLabel setText() 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020683/