JLabel setText()方法不起作用

时间:2015-10-08 16:00:25

标签: java swing jlabel settext

此代码应创建一个包含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
    }

}

1 个答案:

答案 0 :(得分:2)

此:

JLabel jLUhr = new JLabel(); //Uhr = clock in german

...声明&amp;创建一个局部变量,其范围在方法结束时丢失。它应该是:

jLUhr = new JLabel(); //Uhr = clock in german

这是访问全局变量。