الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة مع Thread والكلاس Date

مغلق
بدأه javac في 19 ديسمبر 2005 · 6 رد · 594 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أقوم حالياً بعمل برنامج عبارة عن ساعة تعرض الوقت من السيستم. طبعاً استخدمت Thread لتحديث عرض الوقت كل ثانية.

أريد أن أضيف خيار للمستخدم بتعديل الساعة في البرنامج عن طريق setHour() و setMinute ... لكن المشكلة أن الـThread لا يعتمد التعديلات التي يدخلها المستخدم. بل يعرضها لفترة أقل من ثانية ومن ثم يرجع لتوقيت النظام.

للتوضيح:

public void run(){

try {

while(true) {

java.util.Date() theDate = new java.util.Date();

Thread.sleep(1000);

}

} catch(InterruptedException e) {}

في كل ثانية يأخذ الثريد توقيت النظام. ولا ينتبه للتغير الذي يحدثه الميثود theDate.setHour(int x) الموجود خارج الـ run ميثود.

أرجو أن تفيدوني بطريقة أجعل تغيير الوقت في هذا البرنامج ممكناً

#2

السلام عليكم،

جرب

setHours(int hours)

و

setMinutes(int minutes)

وإذا لم تنفع الطريقة، فاستخدم class نوعه calender

Class Calender

أرجو أن يكون ردي مفيداً،

وفي انتظار أحد الخبراء حتى يساعدك إن شاء الله :)

اللهم طهر أرض فلسطين من العملاء والخونة

#3

أخ ala101

قمت باستخدام الكلاس Date وهي تؤدي الغرض بشكل كامل. لكن المشكلة هي في التعامل مع الـ Thread ... فعند استخدام الميثود setHours(int ) يتم تغيير خانة الساعات لمدة أقل من ثانية واحدة ، وذلك لأن الـ Thread يقوم بإرجاع توقيت النظام كل ثانية. فكيف أقوم بتعديل توقيت النظام وأجعله ثابتاً عن طريق الـ Thread والكلاس Date ؟؟؟

أرجو الإفادة للضرورة

#4

لا أعتقد أنك تستطيع ذلك باستخدام Date،،،

لاحظ عدة أمور:

1- تغيير ساعة النظام تحتاج إلى صلاحيات، فلو فرضنا أن المستخدم ليس له صلاحية تغيير الساعة فهذا يعني أن برنامجك لن يعمل بالصورة المطلوبة.

2- ربما تحتاج إلى برنامج يغير لك الوقت الخاص بنظام وندوز،، اسأل في قسم VB فهم يحبون هذه الدوال. وبذلك تستخدم الدالة في برنامجك الجافا عن طريق Runtime.execute.

3- ربما تجد ما تريد في الفئة System!

#5

إذا كيف يتم التنسيق بين الكلاس Date والـ Thread المستخدم ؟؟

وهل لي بشفرة توضح لي العملية

تحياتي لكم

#6

هنا الكود :

import java.awt.*; 
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.util.Date;

public class Clock extends JFrame implements Runnable{

	private JButton b1 = new JButton("Set hour"); 
    private JTextField tf = new JTextField(10);
	private JLabel lab1=new JLabel("Time now");    
    Date theDate= new Date();
	DateFormat dt = new  SimpleDateFormat( "hh:mm:ss a");
    public Clock(){
      
   	 JPanel jp = new JPanel();
   	 jp.add(lab1);
   	 jp.add(tf);
   	 jp.add(b1);
   	 b1.addActionListener(new ActionListener(){
 	 public void actionPerformed(ActionEvent e){
    String sh = JOptionPane.showInputDialog("Enter the hour:");
              int h = Integer.parseInt(sh);
              theDate.setHours(h);
 	 }
  });
   	 tf.setEditable(false);
   	 setTitle("Clock");
   	 setSize(300,100);
   	 setContentPane(jp);
   	 setVisible(true); 
    }
     public void run(){
   	 try {
      while(true) {
     	 theDate= new Date();
     	 Thread.sleep(1000);
    tf.setText(dt.format(theDate));
         }
   	 } catch(InterruptedException e) {}
    }
     public static void main(String args[]){
   	 Clock c = new Clock ();
   	 Thread t = new Thread(c);
   	 t.start();
    }     
}

لاحظوا المشكلة عند الضغط على الزر set Hour وإضافة قيمة معينة ... يظهر التوقيت معدلاً لمدة أقل من ثانية ومن ثم يعيد توقيت النظام.

أرجو الإفادة للضرورة

شكرا لكم

#7

أنت بهذه الشفرة، كل ثانية تأخذ قيمة Date جديد من النظام،، وإذا غيرت هذه القيمة من خلال setHour فأنت تغير القيمة التي أخذتها ولا تغير القيمة التي في النظام.

أضف إلى ذلك أنك تأخذ قيمة جديدة من النظام كل ثانية، ولهذا ترى القيمة ترجع إلى قيمة النظام بعد أقل من ثانية..

في المشاركات السابقة، نوهت عليك أن الفئة Date لا علاقة لها بالتحكم في ساعة النظام،، ربما تجد ذلك في الفئة System أو اسأل منتدى VB عن API لتغيير ساعة النظام.

بالتوفيق

هذا الموضوع مغلق.

مواضيع مشابهة