此代码应创建一个包含Label的框架,用于打印出时钟。方法zeitLaeuft()
使时钟工作,并使用Button' 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
}
}
答案 0 :(得分:2)
此:
JLabel jLUhr = new JLabel(); //Uhr = clock in german
...声明&amp;创建一个局部变量,其范围在方法结束时丢失。它应该是:
jLUhr = new JLabel(); //Uhr = clock in german
这是访问全局变量。