سؤال

لقد استخدمت البرنامج التالي للحصول على مدار الساعة.ما اتضح أن يكون هو ساعة ثابتة ?لماذا هو كذلك ?

import java.util.*;
import java.awt.*;
import javax.swing.*;

class tester {

    JFrame fr = new JFrame();
    JPanel p = new JPanel();
    JLabel l = new JLabel();
    Date d = new Date();
    GregorianCalendar gc = new GregorianCalendar();

    tester() {
        p.setBackground(Color.red);
        l.setVisible(true);
        p.add(l);
        fr.add(p);
        fr.setSize(200,200);
        fr.setVisible(true);
        startClockThread();
    }

    public void startClockThread() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                startClock();
            }
        };
        new Thread(r).start();
    }

    public void startClock() {
        l.setVisible(true);  
        while(true) {
            l.setText(gc.get(gc.HOUR) + ":" + gc.get(gc.MINUTE) + ":" + gc.get(gc.SECOND));
            System.out.println(gc.get(gc.SECOND));
        }
    }

    public static void main(String args[]) {
        new tester();
    } 
} 
هل كانت مفيدة؟

المحلول

GregorianCalendar() يبني التقويم الميلادي الافتراضي باستخدام الوقت الحالي في المنطقة الزمنية الافتراضية مع الإعدادات المحلية الافتراضية. جافا دوك

يمكنك أن تفعل بهذه الطريقة.

while(true) {
       GregorianCalendar gc = new GregorianCalendar();
   l.setText(gc.get(gc.HOUR) + ":" + gc.get(gc.MINUTE) + ":" + gc.get(gc.SECOND));
}

الآن يجب أن نفهم لماذا كنت تحصل على ساعة ثابتة !

نصائح أخرى

إنك تقوم بإنشاء التقويم الميلادي مرة واحدة فقط ، ولن يتم تحديثه أبدًا.لذا فإن التاريخ هو نفسه دائمًا.

هناك مشاكل كبيرة بخلاف تلك التي لاحظتها:

  • لا تدع الخيوط تتدفق ، ستجمد واجهة المستخدم في النهاية
  • يجب أن يحدث كل وصول إلى أحد مكونات التأرجح في بتوقيت شرق الولايات المتحدة

يمكنك حل كلا الأمرين بسهولة باستخدام javax.swing.Timer

Genacodicetagpre
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top