تعلم كيفية إنشاء تطبيق دردشة بيسط للجوالات بأستخدام J2ME مع NetBeans

إرسال مساهمة في موضوع

اذهب الى الأسفل

تعلم كيفية إنشاء تطبيق دردشة بيسط للجوالات بأستخدام J2ME مع NetBeans

مُساهمة من طرف أحمد مناع في الجمعة أغسطس 09, 2013 9:35 pm

تذكير بمساهمة فاتح الموضوع :

بسم الله الرحمن الرحيم 

أهلا وسهلا بكم إخوانى الكرام و كل عام وانتم بخير ....اليوم إن شاء الله تعالى سنتعلم سويا كيفية أنشاء تطبيق الدردشة للجولات . باستخدام هذا التطبيق يمكنك الدردشة بعضها البعض إذا الجهازين على الشبكة نفسها. ...و في الواقع فكرة هذا التطبيق ستقوم على أنه سيحتوي هذا التطبيق واجهة خادم الدردشة Chat Server  وواجهة عميل الدردشة Chat Client ..... و عند تشغيل خادم الدردشة، يمكن ربط جهاز الآخر مع الجهاز السابق باستخدام تطبيق دردشة العميل.



دعونا نفهم السيناريو باستخدام الصور ....لكى يتم تشغيل التطبيق لديك يجب أولا تشغيل خادم الدردشة (الشكل 2). لأن العميل بحاجة إلى خادم تشغيل للاتصال.....وعندما يتم تشغيل خادم الدردشة يقوم بالدخول إلى الهاتف المحمول الخاص بك و يقوم بالتأكد من وجود عميل الدردشة على نفس الشبكة ليقوم بعدها بتوصيل الأجهزة بعضها البعض من خلال عنوان IP الجهاز





في واجهة الأولي من التطبيق خادم الدردشة سنقوم بانشاء زر امر وليكن بأسم Start.....و فية سنقوم بكتابة التعليمات البرمجية لتشغيل الخادم، عند النقرعلى الأمر ابدأ على الشاشة. فيقوم بالبحث عن العميل وعرض عنوان IP الجهاز كما في الشكل 3. لا يزال أنت لا تحتاج إلى تشغيل تطبيق العميل الدردشة.




إذا لم تكن شبكة متاحة فإنه لن يستطيع الخدام تحديد عنوان IP لذلك سوف تحصل العنوان 127.0.0.1 وهو ما يعني المضيف المحلي. وبعد الحصول على عنوان IP الخادم، يتم بدء تشغيل واجهة العميل


وفى واجهة العميل، وسوف نقوم بتوفير مساحة لكتابة وإرسال عنوان IP لملقم. وهذا يعني انك تقوم بإرسال طلب إلى خادم دردشة على التوالي، التي تريد الاتصال به لفتح منفذ لعمل الدردشة بين الجهازين ...و سنتخدم المنفذ الخاص لارسال و استقبال الرسائل القصيرة sms فى الجوال


الشكل 4 أعلاه يوضح لك فى واجهة العميل طريقة إدخال عنوان IP الخادم وإرسال الطلب إلى الملقم عن طريق الضغط على الامر اتصال.لتشغيل واجهة العميل و الخادم و ربط بعضها البعض بنجاح، وتحصل على رسائل التنبيه على كلا الجهازين كما في الشكل 5. الآن اتصالات مستعدون وأنت أيضا على استعداد للدردشة ويبين الشكل 6 واجهات الدردشة من كل من العميل وتطبيقات الخادم. 



ويمكن لأي شخص بدء دردشة لأن رسالة تنبيه يؤكد أن لهما صلة.لذلك سنقوم بانشاء حقل نصى زر إرسال كما في الشكل 7


ثم يمكنك ان ترى الكتابة النصية التي يتم إرسالها من قبل الطرف الآخر بالحقل النصي الخاص بك كما في الشكل 8. قد سنقوم بتقديد مقدار الأحرف في رسالة واحدة إلى 160 حرف ....وذلك لانه لا يمكنك إرسال أكثر من 160 حرفا في محادثة واحدة من خلال هذا المنفذ .


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

DataInputStream
DataOutputStream
InputStream
InterruptedException
OutputStream
StringBuffer
StringItem

اما الواجهات سنتخدم اواجهات الشبكات التالية :



ServerSocketConnection
SocketConnection



وتلك الفئات و الواجهات قد قمنا بشرحها فى درس [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و الدرس : [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]....لذلك سأعتبرك لديك معلومات عن كيفية استخدام تلك الفئات و الواجهات ...أما تطبيق الدردشة الذى سنقوم بإنشاء سيحتوى على 4 فئات وهم على النحو التالى :


1_ MessageReceiver.java .....و الهدف منها ان يقوم باستلام الرسائل من الطرف الاخر

2_MessageSender.java ........و الهدف من تلك الفئة هو ارسال النصوص الى الطرف الاخر

3_ChatClient.java ..............و هى الفئة التى ستقوم بانشاء واجهة عميل الدردشة

4_ ChatServer.java ............و هى الفئة التى ستقوم بإنشاء واجهة خادم الدردشة .


أولا : أنشاء الفئة  MessageReceiver و الفئة   MessageSender  


1_ قم فتح NetBeans وإنشاء مشروع جديد من التصنيف java me من نوع Mobile Application كما فى الصورة التالية :


2_ قم بالنقر على زر التالى ليظهر لك المربع الحوارى لكتابة أسم MyChatApp مع مراعاة إزالة علامة الخيار  Create Hello MIDlet كما فى الصورة التالية :


3_ قم بالنقر على زر الامر التالى حتى تنتهى من الاعدادات المطلوبة و بعد الانتهاء من تحديد كافة المعلومات اللازمة يمنكنك النقر على زر الامر (finsh )ليظهر لك بنية  netbeans ....


4_ بالنسبة للفئة  MessageReceiver.java و الفئة  MessageSender.java سنقوم بادراجهم فى حزمة واحدة package و ليكن بأسم  anuThreadSub ......و لفعل ذلك سنتبع الخطوات التالية :

أ_ نقوم بتحديد ايقونة التطبيق ثم كليك يمين ومن القائمة التى ستظهر أختر الامر New ثم الامر java package  كما فى الصورة التالية :

ب_سيظهر لك مربع حوارى يطالبك باضافة أسم للحزمة ...أكتب أسم الحزمة فى المكان المخصص و ليكن بأسم  anuThreadSub كما فى الصورة التالية :


ج_ ستجد أنه قد تم إضافة ايقونة بأسم الحزمة الجديدة فى التصنيف source package ....قم بتحديد تلك الايقونة ثم كليك يمين و من القائمة التى ستظهر أختر الامر New ثم الامر java Class كما فى الصورة التالية :


د_ سيظهر لك مربع حوارى يطالبك بوضع اسم لهذا الكلاس أو الفئة ......أكتب فى المكان المخصص الاسم  MessageReceiver كما فى الصورة التالية :


هـــ_بعد الانتهاء من كتابة اسم الفئة أنقر على زر الامر إنهاء .....لتظهر لك صفحة كتابة الشفرة ليس بها غير الشفرات التالية :


الكود:
package anuThreadSub;


public class MessageReceiver {
    
    
}
 _ سنقوم بتعديل الشفرة السابقة على النحو التالى :

_ تحت سطر الامر  package anuThreadSub  نقوم بأدراج المكتبات اللازمة التالية :
الكود:
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Form;
_ نقوم باضافة الامر extends Thread لشفرة إنشاء الفئة لتصبح بالشكل التالى :
الكود:
public class MessageReceiver extends Thread {
    
    
}
_ بداخل تلك الفئة سنقوم بكتابة التعليمات البرمجية التالية :
الكود:
public class MessageReceiver extends Thread {
    private InputStream thisIs;
    private Form thisForm;
    private StringBuffer strBuf;

    public MessageReceiver(InputStream is, Form passForm) {
        this.thisIs = is;
        this.thisForm = passForm;
    }

    public synchronized void run() {
        System.out.println("Message Receiver Thread");

            while (true) {
            int msgByteInt = 0;
            strBuf = new StringBuffer();

            try {

               while (true) {
            
            msgByteInt = thisIs.read();
            strBuf.append((char) msgByteInt);
                
            if (msgByteInt == -1 || msgByteInt == '\n') {
             break;
                    }
                }
                thisForm.append(strBuf.toString());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    
}
 شرح بعض الشفرات السابقة :
_ طالما أستخدمنا  Thread فوجب علينا انشاء الطريقة void run و لمزيد من المعلومان عن هذا الكائن يمكنك متابعة الرابط التالى :
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

_ بداخل الطريقة  void run قما بعمل حلقة تكرارية لتمكننا من الرد عند تلقى رسائل من الطرف الاخر ....وقمنا بالاعلان عن المتغير strBuf كمخزن نصى لتخزين سلسلة قابلة للتغيير من الأحرف باستخدام الامر new StringBuffer 
_عندما نستخدم  الاسلوب read() لقراءة رسالة الدردشة مرة واحدة، فإنه يمكن قراءة فقط كحد أقصى 255 بايت...... ولكن حجم الرسالة الدردشة ربما تكون أكثر من ذلك الحجم. لذلك بعمل حلقة while  أخرى لقراءة الرسالة كاملة .

_ فى السطر الخامس عشر ....أستخدمنا الاسلوب read()  لقراءة البيانات بالبايت بالتتالى و تخزينة فى المتغير msgByteInt 
_ السطر السادس عشر .....قراءة بايت واحد وإلحاقها إلى StringBuffer  
_ السطر السابع عشر ....جملة شرطية يتم إرجاع قيمة البايت باعتبارة في النطاق من 0 إلى 255.و إذا لم يتوفر البايت لأنه قد تم الوصول إلى نهاية الدفق، يتم إرجاع قيمة -1

 الان أنتهيا من كتابة التعليمات البرمجية للفئة  MessageReceiver.java تعالوا الان نقوم بإنشاء الفئة  MessageSender.java  

و _ كرر الخطوات السابقة من أ حتى د .....ثم أكتب أسم الفئة  MessageSender.java .....و بعد الانتهاء من كتابة اسم الفئة أنقر على زر الامر إنهاء .....لتظهر لك صفحة كتابة الشفرة ليس بها غير الشفرات التالية :
الكود:
package anuThreadSub;

public class MessageSender {
    
}
 
 _ سنقوم بتعديل الشفرة السابقة على النحو التالى :

_ تحت سطر الامر  package anuThreadSub  نقوم بأدراج المكتبات اللازمة التالية :
الكود:
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.lcdui.TextField;
_ نقوم باضافة الامر extends Thread لشفرة إنشاء الفئة لتصبح بالشكل التالى :
الكود:
public class MessageSender extends Thread{
    
}
_ بداخل تلك الفئة سنقوم بكتابة التعليمات البرمجية التالية :
الكود:
public class MessageSender extends Thread{
   private OutputStream thisOs;
    private String thisSrvChatMsg;
    private TextField thisTxtFld;

      public MessageSender(OutputStream os, TextField passTxtFld) {
        this.thisOs = os;
        this.thisTxtFld = passTxtFld;
    }

    public synchronized void send(String srvChatMsg){
        this.thisSrvChatMsg = srvChatMsg;
        
        notify();
    }

        public synchronized void run() {
        System.out.println("Messege Sender Thread");
        while (true) {

  
            if(!(thisTxtFld.getString().equals(""))){
                thisTxtFld.setString("");
            }

            if (thisSrvChatMsg == null) {
                try {
                    
                    wait();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }

                try {
               thisOs.write(thisSrvChatMsg.getBytes());
                  
                    thisOs.write("\n".getBytes());

                     thisOs.flush();

                    thisSrvChatMsg = null;
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }      
    }
}
_ واجهة الخادم و وجهة العميل التى سوف يتم برمجتمها لاحقا ستقوم أستدعاء تلك الفئة من خلال OutputStream لذلك عند بناء المشيد لتلك الفئة جعلنا لها معامل OutputStream كما هو موضح فى الكود أعلاه ..
_قمنا بانشاء الطريقة send لتقوم بارسال النصوص الى الطرف الاخر ....وبداخلها كتبنا الامر notify() وذلك لجعل مؤشر ترابط واحد فى حالة انتظار على شاشة هذا الكائن. 
_قمنا بعمل حلقة تكرارية لتشغيل OutputStream حتى نهاية دردشة كاملة والتي يمكن أن تكون أطول من 255 بايت
_ أستخدمنا جملة شرطية داخل الحلقة لمسح الدردشة السابقة من منطقة الكتابة في الحقل النصي
_أستخدمنا جملة شرطية أخرى للتحقق من قيمة thisSrvChatMsg فيتم الانتظار حتى استدعاء مؤشر ترابط آخر ويخطر الأسلوب notify أو notifyAll لهذا الكائن بذلك .
_ اما من السطر thisOs.write يقوم بكتابة النصوص المخزنة فى المتغير thisSrvChatMsg بالبايت ....ويمكنك من انشاء سطر جديد من خلال الامر  thisOs.write("\n".getBytes() ..
_ وأخير تعيين قيمة الرسالة thisSrvChatMsg حتى تتم عملية الانتظار 


و بهذا نكون قد انتهبنا من الحزمة  package anuThreadSub  و التى تحتوى على فئتين هما  MessageReceiver  و  MessageSender  

ثانيا : إنشاء الفئة ChatClient .. و الفئة  ChatServer  :  

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



1_ إنشاء الفئة ChatClient ....تلك الفئة ستكون واجهة رسومية بامتداد  MIDlet و بالتالى سيتم إنشائها على النحو التالى :

أ_ تحديد ايقونة التطبيق ثم كليك يمين ومن القائمة التى ستظهر أختر الامر New ثم الامر Visual MIDlet كما فى الصورة التالية :
 

ب_سيظهر لك مربع حوارى يطالبك ببعض المعلومات كأسم الملف فضع  ChatClient كأسم و اسم الكلاس الخاص ب ChatClient 

ج_بعد الانتهاء من تحديد كافة المعلومات اللازمة للمربع الحوارى السابق قم بالنقر على زر الامر (next) لتظهر لك البنية الرسومية كما فى الشكل التالى :

د_ قم باضافة عدد 2 نافذة Form مع تغير الاسم البرمجى الى sendIpForm و chatForm 

النافذة  sendIpForm قم وضع عليها عدد 2 عنصر أمر Command مع تغير الاسم البرمجى الى exitCmd و  connectCmd .....ثم قم بوضع عدد 1 حقل نصى TextField مع تغير الاسم البرمجى الى ipTxtFld 

النافذة chatForm قم بوضع عليها عدد 1 عنصر أمر  أمر Command مع تغير الاسم البرمجى الى sendCmd .... .ثم قم بوضع عدد 1 حقل نصى TextField مع تغير الاسم البرمجى الى chatMsgTxtFld ....

ثم نقوم بادراج عدد 1 عنصر تنبية Alert مع تغير الاسم البرمجى الى infoAlert 

هــ_كتابة التعليمات البرمجية .....قم بالنقر على التويب source ليتم فتح نافذة كتابة الشفرة و بها بعض الاكواد :

_ ستجد صفحة الكود فيها بعض الشفرات لاستيراد بعض المكتبات ...سنقوم نحن باستيراد المكتبات الاخرى اللازمة على النحو التالى 
الكود:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import anuThreadSub.MessageReceiver;
import anuThreadSub.MessageSender;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
_ ستجد ايضا فى صفحة كتابة الشفرة ....أن الفئة قد تم انشائها بالكود التالى :
الكود:
public class ChatClient extends MIDlet implements CommandListener {
سنقوم نحن بتعديل الكود السابق و ذلك بإضافة الامر Runnable ليصبح بالشكل التالى :
الكود:
public class ChatClient extends MIDlet implements CommandListener,Runnable {
_ ستجد خطوط حمراء تدل على وجود خطا فى الكود ...وذلك بسبب أن الواجهة  Runnable تتطلب انشاء الطريقة void run لذلك سيتم إنشائها على النحو التالى :

الكود:
 public void run() {
        
    }
_ تحت السطر البرمجى لانشاء الفئة سنقوم بالاعلان عن المتغيرات التالية :
الكود:
private String chatMsg;
private MessageSender msgSenClass;
private String srvIp;
private SocketConnection socCon;
private DataInputStream is;
private DataOutputStream os;
 _ بداخل الطريقة void run نقوم بكتابة التعليمات التالية :
الكود:
 public void run() {
       srvIp = ipTxtFld.getString();

        if (srvIp != null && srvIp.length() > 0) {
            try {
         socCon = (SocketConnection) Connector.open("socket://" + srvIp + ":60000");

         is = socCon.openDataInputStream();

       os = socCon.openDataOutputStream();
                
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            msgSenClass = new MessageSender(os, chatMsgTxtFld);
            msgSenClass.start();

            MessageReceiver msgRecClass = new MessageReceiver(is, chatForm);
            msgRecClass.start();

            infoAlert = new Alert("Server connected successfully.");
            display.setCurrent(infoAlert, chatForm);  
    }
        }
شرح بعض الاسطر :
_ السطر الخامس ....إنشاء اتصال مأخذ وفتح منفذ لهذا الصدد 
_السطر السادس ....جعل المتغير is يقوم باستلام  دفق البايت (الرسائل النصية )
_السطر السابع .....جعل المتغير os يقوم بارسال البايت 
الاسطر الاخير ....أنشاء كائن جديد من الفئة MessageReceiver لبدء عملية ارسال البيانات

_ سنقوم بالبحث عن الطريقة public void commandAction فى صفحة كتابة الشفرة و ستجدها بها الاكواد التالية :
الكود:
public void commandAction(Command command, Displayable displayable) {
        
        if (displayable == chatForm) {
            if (command == sendCmd) {
              
            }
        } else if (displayable == sendIpForm) {
            if (command == connectCmd) {
              
 
              
            } else if (command == exitCmd) {
              
 
            
            }
        }
      
    }
سنقوم باضافة بعض الشفرات اليها لتصبح كما يلى :

الكود:
 public void commandAction(Command command, Displayable displayable) {
      
        if (displayable == chatForm) {
            if (command == sendCmd) {
               chatMsg = chatMsgTxtFld.getString();
            msgSenClass.send(chatMsg);
 
              
            }
        } else if (displayable == sendIpForm) {
            if (command == connectCmd) {
             new Thread(this).start();
 
              
            } else if (command == exitCmd) {
               notifyDestroyed();
 
              
            }
        }  
    }
و هكذا نكون قد أنتهينا من تلك الفئة 


2_ إنشاء الفئة  ChatServer  ......قم بتكرار الخطوات من أ حتى ج التى استخدمناها فى انشاء الفئة   ChatClient  .....

أولا : التصميم :

_ثم قم بادراج عدد 3 نافذة Form مع تغير الاسم البرمجى الى chatServerForm و showIpForm و srvChattingFrm 

_ النافذة  chatServerForm .....قم بوضع عليها عدد 1 عنصر StringItem مع تغير الاسم البرمجى الى startServerStrItem ....ومن نافذة الخصائص لهذا العنصر أجعل الخاصية Appearance  تساوى القيمة    BUTTON ......و ايضا أجعل الخاصية lable  تساوى القيمة   Start Chat Server ....

ايضا قم بوضع عنصر شريط التقدم Gauge  مع تغير الاسم البرمجى الى  gaugeItem ....ومن نافذة الخصائص لهذا العنصر أجعل الخاصية   lable تساوى Waiting for client... ...

_ ايضا قم بإضافة عدد 2 عنصر امر Command مع تغير الاسم البرمجى الى startCmd و exitCmd

_ النافذة showIpForm ....  قم بوضع عليها عدد 1 عنصر StringItem مع تغير الاسم البرمجى الى ipStrItem ...و ايضا عدد عنصر   امر Command مع تغير الاسم البرمجى الى  exitCmd  

_ النافذة srvChattingFrm .....قم بوضع عليها عدد حقل نصى TextField مع تغير الاسم البرمجى الى chatTxtFld ....و ايضا عدد 2 عنصر امر   Command مع تغير الاسم البرمجى الى  exitCmd  و sendCmd  

 ثانيا : كتابة التعليمات البرمجية

 _ نقوم باستيراد المكتبات الاخرى اللازمة على النحو التالى :
الكود:
import anuThreadSub.MessageReceiver;
import anuThreadSub.MessageSender;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
_  ستجد ايضا فى صفحة كتابة الشفرة ....أن الفئة قد تم انشائها بالكود التالى :
الكود:
public class ChatServer extends MIDlet implements CommandListener {
_ سنقوم نحن بتعديل الكود السابق و ذلك بإضافة الامر Runnable و الامر ItemCommandListener ليصبح بالشكل التالى : 
الكود:
public class ChatServer extends MIDlet implements CommandListener , ItemCommandListener, Runnable {
_ ستجد خطوط حمراء تدل على وجود خطا فى الكود ...وذلك بسبب أن الواجهة  Runnable تتطلب انشاء الطريقة void run لذلك سيتم إنشائها على النحو التالى :

الكود:
 public void run() {
        
    }
_ تحت السطر البرمجى لانشاء الفئة سنقوم بالاعلان عن المتغيرات التالية :

الكود:
 private Display display;
    private ServerSocketConnection serSocCon;
    private String deviceIp;
    private SocketConnection socCon;
    private DataInputStream is;
    private DataOutputStream os;
    private Alert infoAlert;
    private String srvChatMsg;
    private MessageSender msgSenderClass;
_ بداخل الطريقة void run نكتب التعليمات التالية :

الكود:
  public void run() {
        System.out.println("Runnig");
        try {
          
            serSocCon = (ServerSocketConnection) Connector.open("socket://:60000");
            System.out.println("Open the socket...");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        try {
          
            deviceIp = serSocCon.getLocalAddress();
            System.out.println("Get device IP...");
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        showIpForm.append(deviceIp);
        display.setCurrent(showIpForm);
        
        try {
            System.out.println("Waiting for client request...");
          
            socCon = (SocketConnection) serSocCon.acceptAndOpen();
            System.out.println("Accepted and open the connection...");
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        try {
          
            is = socCon.openDataInputStream();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        try {
          
            os = socCon.openDataOutputStream();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        msgSenderClass = new MessageSender(os, chatTxtFld);
        msgSenderClass.start();

        MessageReceiver msgReceiverClass = new MessageReceiver(is, srvChattingFrm);
        msgReceiverClass.start();

        infoAlert = new Alert("Client connected successfully.");
        display.setCurrent(infoAlert, srvChattingFrm);
    }
شرح بعض الاسطر البرمجية :

السطر الرابع : تعرف الواجهة ServerSocketConnection كمقبس الخادم لاتصال.... وإنشاء مأخذ أاستماع الخادم على المنفذ  60000 
السطر التاسع : للحصول على  عنوان المضيف (رقم IP) 

_ نقوم بإنشاء طريقة أخرى لمسح محتويات الحقل النصى بعد ما يتم الارسال الى الطرف الاخر 
الكود:
public void clear(){
        chatTxtFld.setString("");
      
    }
_  سنقوم بالبحث عن الطريقة public void commandAction لكتابة التعليمات البرمجية التالية :
الكود:
 public void commandAction(Command command, Displayable displayable) {
      
        if (displayable == chatServerForm) {
            if (command == exitCmd) {
               notifyDestroyed();
 
              
            } else if (command == startCmd) {
              new Thread(this).start();
 
            
            }
        } else if (displayable == showIpForm) {
            if (command == exitCmd2) {
                notifyDestroyed();
 
              
            }
        } else if (displayable == srvChattingFrm) {
            if (command == exitCmd3) {
                 notifyDestroyed();
 
              
            } else if (command == sendCmd) {
              srvChatMsg = chatTxtFld.getString();
          
            msgSenderClass.send(srvChatMsg);
 
                
            }
        }
        
    }
 
المصدر الكامل للكود / 

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


وغدا ستم رفع المشروع فى المرفقات

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة
avatar
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 859
النقاط : 201562
التقيم : 83
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل


رد: تعلم كيفية إنشاء تطبيق دردشة بيسط للجوالات بأستخدام J2ME مع NetBeans

مُساهمة من طرف أحمد مناع في الأربعاء أغسطس 21, 2013 10:47 am

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] كتب:استاذ احمد سؤال
لما عم اكتب رقم الاي بي في chat client واظغط اتصال
تظهر رسالة : يوجد استثناء لم يتم التعامل معه    اغلاق التطبيق
الاخ الكريم أيمن ....التطبيق عندى شغال جيدا بدون ظهور الخطأ المشار اليه ...لذلك ربما يكون السبب فى ذلك هو تغيرك لبعض الاكواد الواردة فى السورس كود ....لذلك قم بتحميل السورس كود مرة أخرى مع تعديل الخطأ الذى تم حله فى المشاراكات السابقة وهو

  
this application does not use the screen and runs in the background

ثم قم بتشغيل التطبيق   إن شاء الله سيعمل لديك بنجاح

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة
avatar
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 859
النقاط : 201562
التقيم : 83
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم كيفية إنشاء تطبيق دردشة بيسط للجوالات بأستخدام J2ME مع NetBeans

مُساهمة من طرف Programmer_78 في الجمعة سبتمبر 12, 2014 1:19 pm

Thank you that is very important
avatar
Programmer_78
.
.

تاريخ التسجيل : 12/08/2014
المساهمات : 3
النقاط : 3
التقيم : 0
الدولة : السودان
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم كيفية إنشاء تطبيق دردشة بيسط للجوالات بأستخدام J2ME مع NetBeans

مُساهمة من طرف زهراء في الجمعة سبتمبر 12, 2014 3:19 pm

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] كتب:Thank you that is very important


Very Happy Very Happy Very Happy Very Happy
avatar
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 347
النقاط : 571
التقيم : 38
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
تستطيع الرد على المواضيع في هذا المنتدى