Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java每秒钟更改一次JLabel_Java_Swing_Static_Jlabel_Repeat - Fatal编程技术网

Java每秒钟更改一次JLabel

Java每秒钟更改一次JLabel,java,swing,static,jlabel,repeat,Java,Swing,Static,Jlabel,Repeat,我发现了一个如何在java中执行重复任务的示例。现在,我希望标签的文本每秒都会更改。我该怎么做? 我得到一个错误:无法从静态上下文引用非静态方法repeatingTask() 不知何故,JLabel不是静态的,但是publicstaticvoidmain当然是静态的 public class whathappens { StartGUI startGUI = new StartGUI(); public void repeatingTask(){

我发现了一个如何在java中执行重复任务的示例。现在,我希望标签的文本每秒都会更改。我该怎么做? 我得到一个错误:无法从静态上下文引用非静态方法repeatingTask()

不知何故,JLabel不是静态的,但是publicstaticvoidmain当然是静态的

public class whathappens {
    StartGUI startGUI = new StartGUI();
    
    
    public void repeatingTask(){
        getJLabel1().setText("Running: "+ new java.util.Date());
    }
    
    public static void main(String[] args) {
        StartGUI.main(args);
        
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                repeatingTask();
                System.out.println("Running: " + new java.util.Date());
            }
        }, 0, 1000);
    }
}

我的想法是从startGUI类调用getJLabel1()方法来更改“whathappens”类中的标签,因为您不清楚如何获得JLabel。 无论如何,计时器任务必须包含对JLabel的引用。您可以尝试类似的方法:

JLabel label = new JLabel();
Timer timer = new Timer(1000, e -> label.setText("Running: " + new Date());
timer.start();

此代码在上下文中使用
javax.swing.Timer
,这比
java.util.Timer
更好,就好像在。在这个线程中,GUI代码必须更新。

您不清楚如何获得JLabel。 无论如何,计时器任务必须包含对JLabel的引用。您可以尝试类似的方法:

JLabel label = new JLabel();
Timer timer = new Timer(1000, e -> label.setText("Running: " + new Date());
timer.start();

此代码在上下文中使用
javax.swing.Timer
,这比
java.util.Timer
更好,就好像在。必须在这个线程中更新GUI代码。

我通过一个getter获得JLabel,它只返回标签。但是在您的代码中,我仍然存在静态和非静态上下文的问题。无法从静态变量引用非静态变量JLabel1context@Unkannt,您的代码不应具有静态变量和方法。有关如何更好地构造代码的完整示例,请参阅。使用该示例作为起点,然后自定义。@seb34好答案(1+)。也许将来您可以参考,因为它包含了OP将来可以用作参考的大多数Swing基础知识部分。例如,“Swing中的并发性”部分解释了EDT和“如何使用Swing计时器”。这两个部分都与此问题/答案直接相关。@camickr我将查看链接。但我不是故意使用静态方法。这是公共静态main方法,我不能将其更改为非静态。@未知我提供给您的链接中的工作代码的哪一部分不明白?我通过一个getter获取JLabel,它只返回标签。但是在您的代码中,我仍然存在静态和非静态上下文的问题。无法从静态变量引用非静态变量JLabel1context@Unkannt,您的代码不应具有静态变量和方法。有关如何更好地构造代码的完整示例,请参阅。使用该示例作为起点,然后自定义。@seb34好答案(1+)。也许将来您可以参考,因为它包含了OP将来可以用作参考的大多数Swing基础知识部分。例如,“Swing中的并发性”部分解释了EDT和“如何使用Swing计时器”。这两个部分都与此问题/答案直接相关。@camickr我将查看链接。但我不是故意使用静态方法。这是公共静态main方法,我不能将其更改为非静态。@unkant我提供给您的链接中的工作代码的哪一部分不明白?