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

2 - التطبيق الاول باستخدام J2ME

مغلق
بدأه مصعب غيلان في 2 يوليو 2004 · 16 رد · 9,506 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عرفنا فيما سبق ان J2ME هي القسم الثالث من اقسام الجافا بعد J2SE و J2EE

وهذا القسم J2ME يعمل على الاجهزة الصغيرة Small device

والان سنتعرف على المكتبات الخاصة بهذة اللغة وكذلك انواع المعطيات المستخدمة و هيكلية بناء البرنامج ثم ننتقل الى بناء التطبيق الاول باستخدام J2ME

* المكتبات الاساسية الخاصة بالـ J2ME هي :javax.microedition.lcdui : تزودنا هذة المكتبة بالعديد من واجهات المستخدم مثل النوافذ والازرار وصناديق النصوص

javax.microedition.rms : تزودنا هذة المكتبة بالطرق المستخدمة لخزن البيانات على وحدة الخزن الرئيسية للموبايل

javax.microedition.midlet : تزودنا هذة المكتبة بال MIDP وكذلك بالبيئة التي سيعمل فيها التطبيق

javax.microedition.io : تزودنا هذة المكتبة بالمناهج الخاصة بعمليات الاتصال GenericConnection framework GCF

java.io : تزودنا هذة المكتبة بالمناهج الخاصة بعمليات الادخال والاخراج

java.lang : تحتوي على المناهج الخاصة بال J2SE وانواع المعطيات

java.util : تحتوي على المناهج الملحقة

كما ان هناك العديد من المكتبات الاخرى التي تعمل على اجهزة معينة فقط

بينما هذة المكتبات هي المكتبات الاساسية الخاصة بال J2ME

* انواع المعطيات في J2ME

java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Integer
java.lang.Long
java.lang.Short

ونلاحظ هنا ان J2ME لا تدعم الاعداد ذو النقطة العائمة float , double

وذلك لان النقطة العائمة تحتاج الى عتاد كبير وبرمجيات ذو تكلفة عالية

* بناء البرنامج الاول

عند قراءة هذا الموضوع يفترض ان يكون عندك معلومات لا بأس بها عن البرمجة الكائنية

في برنامج الجافا او السي مثلا نرى ان بداية تنفيذ الكود يبدأ من الدالة main

اما بالنسبة لل J2ME فإن الامر مختلف قليلا وسيبدأ تنفيذ البرنامج في J2ME من الدالة startApp وذلك لسبب بسيط وهو

انه عندما نقوم بتحديد برنامج ما هو البرنامج الرئيسي في الجافا او السي يكفي ان نقوم بكتابة الدالة Main لنشير للمترجم ان يبدأ من هنا

اما في J2ME فاننا نقوم بانشاء منهج مشتق من المنهج MIDlet الموجود في الحزمة javax.microedition.midlet

ويوجد في هذا المنهج الطرق المجردة abstract Methods الثلاث التالية destroyApp , pauseApp , startApp

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

ولهذا فإن البرنامج الرئيسي سيكون هو البرنامج الذي سيتم اشتقاقه من الصنف MIDlet وسيبدأ تنفيذ البرنامج من الدالة startApp

ايظا هناك الطريقتان destroyApp , pauseApp

pauseApp : يتم تنفيذ هذة الدالة عند انتقال التطبيق من الحالة النشطة الى الحالة الغير نشطة

destroyApp : يتم تنفيذ هذة الدالة عند اغلاق التطبيق

* دورة حياة البرنامج الرئيسي MIDlet

untitled_1720041449210.1313288.JPG

وكما هو واضح من الرسم نجد ان التطبيق يمر بثلاثة مراحل او حالات

الحالة الابتدائية النشطة ثم الحالة غير النشطة (التوقف المؤقت) ثم حالة الاغلاق وانهاء التطبيق

لا تهتم حاليا بالحالة pauseApp

ولكن سنركز على الحالتين startApp , destroyApp

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

وبعد ذلك سينتقل التنفيذ الى الدالة startApp

* والان سنقوم بكتابة المثال التالي

قم بكتابة هذا الكود مع ملاحظة انه يجب حفظ هذا الملف بنفس اسم المنهج HelloMidlet

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;


public class HelloMidlet extends MIDlet
{

private Display display;


TextBox box = null;

public void HelloMidlet(){}

public void startApp(){


display =Display.getDisplay(this);

box =new TextBox("Simple Example ","Hello ",20,0);

display.setCurrent(box);
}

public void pauseApp(){ }

public void destroyApp(boolean unconditional){}
}

*لتحويل هذا البرنامج الى تطبيق على الجوال سنتبع الخطوات

المذكورة هنا

هذا اذا كنت تستخدم Wireless Toolkits

اما بالنسبة لمستخدمي Borland JBuilder MobileSet فإنه يكفي تشغيل الامر Run من القائمة

تم تعديل هذه المشاركة بواسطة مصعب غيلان في 2 يوليو 2004 في 00:50

#2

جزاك الله عنا كل خير... طبقت مثالك وأشتغل ...

تأتي مرحلة فهم الكود الان...

#3
اقتباس
تأتي مرحلة فهم الكود الان...

نعم هذه هي

import javax.microedition.midlet.*;

هنا قمنا باخبار المترجم باننا سوف نستخدم جميع الكلاسات المضمنه في الدليل javax.microedition.midlet

وهذا هو معنى النجمة

معناها جميع الكلاسات الموجودة في دليل معين

import javax.microedition.lcdui.*;

هنا ايظا نفس الحكاية السابقة

من اجل تضمين الكلاسات

TextBox و Display

public class HelloMidlet extends MIDlet

هنا قمنا بانشاء البرنامج الرئيسي الذي هو عبارة عن كلاس

ولكن قمنا باشتقاقه من الكلاس

MIDlet

والذي تحدثنا عنه مسبقا

private Display display;

تعريف كائن

display

والذي هو عبارة عن تمثيل لشاشة الموبايل

ويتم التعامل مع الشاشة عبر هذا الكائن

TextBox box = null;

هنا قمنا بتعريف صندوق نص جديد

null = : من الممكن عدم كتابتها

public void HelloMidlet(){}

وهذا هو المشيد

constructor

ولن نحتاج في مثالنا هذا اضافة اي كود بداخله لذلك هو خال من الكود

public void startApp(){

من هنا سيبتدأ تنفيذ البرنامج

display =Display.getDisplay(this);

بعد ان قمنا بتعريف الكائن في السابق

الان سنقوم بربطه مع شاشة هذا التطبيق

طبعا هذا بشكل افتراضي

box =new TextBox("Simple Example ","Hello ",20,0);

هنا قمنا بتعريف كائن صندوق نص

مع انشاء هذا الكائن باستخدام الامر

new

display.setCurrent(box);

الان نقوم بعرض صندوق النص على شاشة البرنامج

تم تعديل هذه المشاركة بواسطة مصعب غيلان في 3 يوليو 2004 في 01:30

#4

اخي مصعب

ان شاء الله ساقوم بعد فترة اذا اراد المولى عز وجل بتحويل كل ما كتبته وسيكتب الى كتاب pdf وان شاء سابلغكم من اجل الاهداءت واضعه هنا حتى يكون مرجع باللغة العربية

لست متواجد بشكل يومي

#5

ما شاء الله أخ مصعب عندك اسلوب رائع بالشرح وفقك الله وسأتابع دروسك حتى النهاية

#6
اقتباس
ما شاء الله أخ مصعب عندك اسلوب رائع بالشرح وفقك الله وسأتابع دروسك حتى النهاية

هل تتكلمون بصدق ؟

انا لست مقتنعا بالدروس

على العموم انا ناوي انزل مجموعة من الاكواد

لكن ليس لدي وقت لترتيبها ووضها في برنامج كامل واتمنى مساعدتكم ي هذا

تم تعديل هذه المشاركة بواسطة مصعب غيلان في 2 يوليو 2004 في 15:40

#7

بس لو تضع الجمل البرمجية ضمن سمة كود لتظهر بشكل افضل

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#8

مشكوووور أخوي مصعب غيلان

أنا برمجت أول تطبيق لي في الــ J2ME

وإن شاء الله أطبق كل دروسك

وشكرا مرة ثانية .....

#9

سؤال أخ مصعب :

ممكن تشرح لي هذا الكود لو سمحت ؟؟

public void destroyApp(boolean unconditional){}

وشكرا مرة أخرى.....

#10
public void destroyApp(boolean unconditional){}

قلنا بان

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

هذة الداله نقوم بإستدعائها عندما نريد اغلاق التطبيق

وقد قمنا باستخدامها في الدروس اللاحقة

يكفي ان نقوم بذكر اسم الدالة و كذلك نقوم بتشغيل الملاحظ الذي يتحسس عملية الاغلاق كما في هذا المثال

عندما نقوم بالضغط على الزر Exit

if ( c == cmdExit )
       {
        destroyApp(false);
        notifyDestroyed();
       }
#11

مشكور اخوي مصعب غيلان على التوضيح

وشكرا لك مرة ثالثة .......

#12

السلام عليكم

أخي العزيز مصعب يعطيك العافية على مجهوداتك الخيرة التي تقدمها

وأود أن تجيبني على هذا السؤال

حتى أكتب الكود الذي في الأعلى وأستورد المكتبات السابقة

ماذا يجب أن يكون عندي لعمل هذه الخطوة كخطوة أولى

تحياتي

#13
اقتباس
وأود أن تجيبني على هذا السؤال

حتى أكتب الكود الذي في الأعلى وأستورد المكتبات السابقة

ماذا يجب أن يكون عندي لعمل هذه الخطوة كخطوة أولى

والله اخي لم افهم مشكلتك بالضبط لكن انا متأكد انك تعاني الكثير من المشاكل

لذلك لا تهتم سأساعدك بإذن الله

يمكنك اضافتي الى الماسنجر وسنتحدث سويا لافهم المشاكل التي تعانيها

تفحص صندوق الوارد الخاص بالمنتدى

#14

أخي العزيز مصعب

والله كأنك تدري أني بصراحة أعاني وأود أكلمك عبر الماسنجر

الوارد اللي قلت لي عنه بحثت عنه وين مكانه

على العموم أيملي هو

khutam@hotmail.com

تحياتي لك

#15

رجاء :

أين يتم كتابة هذة الاكواد مع J2me

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

Practice makes perfect 2007*

البرمجة بلا انطباعات

#17

أخ مصعب

أنا طبقت الدرس بس لمن أضغط launch في الجوال مايفتح أي شاشة ويكتب الخطأ التالي

Running in the identified_third_party security domain

Uncaught exception java/lang/NoClassDefFoundError: HelloMIDlet.

ممكن أعرف إيش المشكله؟

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

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