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

أرجو المساعدة في كود progressBar

بدأه hossamnew في 12 فبراير 2010 · 4 رد · 717 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أقوم بمشروع لحفظ وإرجاع ملفات من ماي سكول

إلي هنا كل شئ تمام

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

فأرجو من ذوي الخبرات إعطائي الكود اللازم لعمل progressBar تفاعلي مع عملية الإرسال والإستقبال من قاعدة البيبانات

لأني جربت إعطاء الـ progressBar القيم من progressBar.setvalue لكن يظل البرنامج مجمد وعند إنتهاء نقل الملفات يصل الـ progressBar إلي 100% مرة واحدة

علماً بأني مبتدئ فأرجو الشرح المفصل منكم

وجزاكم الله خيراً مقدماً

#2

قم بوضع عملية نقل الملف في Thread غير ال Thread ال Main

لان ال thread الاصلي يكون في حالة block لحين الانتهاء من نقل الملف و لذلك يكون البرنامج مجمد

ملحوظمة مهمة : لو مكنش عندك فكرة عن موضوع ال thread لا زم تذاكره لانه مهم جدا

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 13 فبراير 2010 في 02:02

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#3

شوف المثال دة عن طريقة استخدام Thread اخرى -كما قال الأستاذ سامح- ...

بأستخدام NetBeans , أنشيء مشروع جديد java----->New project-----> java Desktop Application ثم سمي المشروع Example واترك جميع الخيارات كما هي واضغط finish .

سيتم انشاء واجهة جديدة , اسحب وادرج فيها زر JButton واحد ثم افتح المحرر بالضغط على source واكتب الكود التالي داخل الclass ExampleView :


private boolean enabled = true;

public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean st) {
boolean old = enabled;
enabled = st;
this.firePropertyChange("enabled", old, enabled);
}
الحدث الذي سيقوم بإطلاق العملية في معالجة منفصلة
@Action(enabledProperty = "enabled")
public Task start() {
قم بتعطيل امكانية استخدام الحدث لحين انتهاء العملية
setEnabled(false)
return new MyTask(this.getApplication());

}

class MyTask extends Task {

public MyTask(Application app) {
super(app);
}

@Override
protected Object doInBackground() throws Exception {

على افتراض العملية تتم على اربع مراحل
setMessage("started!");

اكتب كود المرحلة الاولى هنا
setProgress(25);
setMessage("stage 1 has completed!");

المرحلة الثانية هنا
setProgress(50);
setMessage("stage 2 has completed!");

المرحلة الثالثة هنا
setProgress(75);
setMessage("stage 3 has completed!");

المرحلة الأخيرة
setProgress(100);

setMessage("finished!");


return null;
}

@Override
protected void failed(Throwable cause) {
في حالة فشل العملية
setMessage("Eroor!: " + cause.toString());
}

@Override
protected void finished() {
اعد امكانية استخدام الحدث بعد الإنتهاء
setEnabled(true);
}
}

لا تنسى استيراد التالي

import org.jdesktop.application.Application;
import org.jdesktop.application.Task;

ارجع الأن لواجهة التصميم Design وعدل في الخاصية Action للزر واجعل قيمتها start (وهو اسم الaction الذي انشأناة وهكذا ربطنا الزر بالحدث ) ستجد الخاصية Action ضمن خصائص الزر properties على يمينك. والان عندما تضغط الزر ستنطلق العملية في thread منفصلة والزر سيظل معطلا حتى الإنتهاء

(وهذة فائدة setEnabled حيث اتحكم بالزر عبر خاصية الحدث نفسة :) )

قد تسأل ماذا سيحدث لو لم أستخدم setProgress() ,ببساطة ستظل علامة الProgressBar "رايحة جاية" حتى انتهاء العملية, يعني مثل حكاية الويندوز عند بدء التشغيل .

انصحك بإستخدام setProgress() لما تكون العملية طويلة شوية والمستخدم محتاج يعرف هي وصلت لفين.

ولا تستخدمها في العكس.

وفي الاخير ,افضل ايضا ان تتوسع في قرائة موضوع ال thread

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#4

شكراً لكم أخوتي علي سرعة الرد والإستجابة

وشكراً جزيلاً لك أخي Dr.Robert

لكن عند تطبيق الكود الخاص بك كما قلت ظهرت لي هذه المشاكل في الصورة في المرفقات

أرجوالإضاح لي بعد إزنك وجزاك الله خيراً

post-206429-12661594218287_thumb.png

#5

تأكد انك عامل استيراد لTask وApplication :

import org.jdesktop.application.Application;
import org.jdesktop.application.Task;

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

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