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

SAVE game

بدأه ريحانة الاقصى في 2 سبتمبر 2011 · 22 رد · 695 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لقد قمت بالاستفادة من موضوع سابق في المنتدى لكود يحفظ اللعبة

هذا هو الرابط

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

import java.io.IOException; 
import java.io.*;


public class MyGame implements Serializable{

     static void saveGame(pegSolitaire peg, String filePath) throws IOException
    {
        ObjectOutputStream outputStream = null;
        try
        {
            outputStream = new ObjectOutputStream(new FileOutputStream(filePath));
            outputStream.writeObject(peg);
        }
        catch(FileNotFoundException ex)
        {
            ex.printStackTrace();
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                if(outputStream != null)
                {
                    outputStream.flush();
                    outputStream.close();
                }
            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }
        }
    }


    public static pegSolitaire loadGame(String filePath) throws IOException,FileNotFoundException ,ClassNotFoundException   {
            FileInputStream fileIn = new FileInputStream(filePath);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            return (pegSolitaire) in.readObject();
    }

}

حيث ان الكائن هو من نوع pegSolitaire من كلاس تم انشاءه داخل البرنامج

الكود لا يظهر اي اخطاء ولكن لا ينفذ بالمرة

وهذه الاكواد داخل ال

   public void actionPerformed(ActionEvent e) {
   	if(e.getSource()==pegsolitaire.save){
   System.out.println ("save");
     int answer = JOptionPane.showConfirmDialog(pegsolitaire,"Etes-vous sûr de vouloir enregistrer?", null,JOptionPane.YES_NO_OPTION);

                if (answer == JOptionPane.YES_OPTION) {

                  try{

                   MyGame.saveGame(pegsolitaire, "y.svg");  
                  }
                  catch(IOException ex){
                  	 System.out.println ("save");
                  }  

                }
        }

        if(e.getSource()==pegsolitaire.open){

        	 int answer = JOptionPane.showConfirmDialog(
                        pegsolitaire,
                        "Etes-vous sûr de vouloir ouvrir le jeu?",
                        null,
                        JOptionPane.YES_NO_OPTION);

                if (answer == JOptionPane.YES_OPTION) {



                    try{

                    MyGame.loadGame("y.svg");
                  }



                  catch(IOException ex){

                  }
                  catch(ClassNotFoundException ex){

                  }

                }


                }

        }

وما هو امتداد الملف المطلوب؟؟؟

تم تعديل هذه المشاركة بواسطة ريحانة الاقصى في 2 سبتمبر 2011 في 23:49

#2

اولا امتداد الملف يكون اي امتداد تريدينه ايا كان

ثانيا لا يظهر اي شيئ في الغالب بسبب حدوث خطأ ولكن بما انك عاملة

catch(Exception ex){}

فلن يحدث اي شيئ لكي تتأكدي من عدم وجود خطأ قومي بوضع

ex.printStackTrace();

داخل كل كاتش ثم شغلي في النت بينز وتاكدي من عدم حدوث خطأ

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

قمت بوضعها ولم يتغير شئ

انا اعمل على ال jCreator هل يختلف ؟؟؟

هذا هو الملف كامل عبارة عن ابلت

pegSoliter.rar

تم تعديل هذه المشاركة بواسطة ريحانة الاقصى في 3 سبتمبر 2011 في 00:07

#4

البرنامج حقك ابليت؟ مارايك لو تقومي برفع الملفات

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5
mental-driller كتب:

البرنامج حقك ابليت؟ مارايك لو تقومي برفع الملفات

اهاا ابلت

رفعتها

pegSoliter.rar

تم تعديل هذه المشاركة بواسطة ريحانة الاقصى في 3 سبتمبر 2011 في 00:18

#6

في الكلاس الخاص بــ pegSolitaire جربي اضافة setVisible(true)

تم تعديل هذه المشاركة بواسطة mental-driller في 3 سبتمبر 2011 في 00:19

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7

لم افهم ما تقصد

ولكن انا وضعت معظم العمل داخل الملف pegsolitaire

ولم اوجه مشكلة في باقي العمل !!!!!!!!!

#8

عفوا تم تعديل الرد بالاعلى

جربي اضافة setVisible(true) للكلاس pegSolitaire

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#9

وضعتها قبل

pegSolitaire pegsolitaire=new pegSolitaire();

حتى يتم التعرف عليها من كافة الملف mypaint

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

موجود داخل mygame

وداخل my paint فقط لا يوجد داخل الملف pegsoliter ما له علاقة بالحفظ

#10

عفوا تم تعديل الرد بالاعلى

جربي اضافة setVisible(true) للكلاس pegSolitaire

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#11
mental-driller كتب:

عفوا تم تعديل الرد بالاعلى

جربي اضافة setVisible(true) للكلاس pegSolitaire

وضعتها داخل ال counstrecter ولم يتغير شي

ولكن لماذا

#12

قومي باضافة الدالة paint() للابليت

واضيفي بداخلها السطر super.paint(g); حيث g هو الــ graphics object

تم تعديل هذه المشاركة بواسطة mental-driller في 3 سبتمبر 2011 في 00:32

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#13

ما هو ال graphics object

وهل اضع ال

 public void init(){

       	 super.paint(g);

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

  public void paintComponent(Graphics g) {
             super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;

ف ما هو ال graphics object

الذي ساضعه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#14

لا قومي بعمل overriding للدالة داخل الابليت

هكذا

public void paint(Graphics g){
super.paint(g);
}

تم تعديل هذه المشاركة بواسطة mental-driller في 3 سبتمبر 2011 في 00:44

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#15

للاسف ما تغير شي

لدرجة صرت شاكة انو ما حطيت لسنر للزر

واطلعت ع هدول السطرين عشر مرات عشان اتاكد لانه ما بيغير شي

 save.addActionListener(this);
       open.addActionListener(this);
#16

عفوا مجددا اي المشكلة بالضبط ؟ هل انه مافيش اي شيئ في الشاشة ؟ او مشكلة في الحفظ؟

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#17

المشكلة

انا حطيت داخل الكلاس mypaint

 public void actionPerformed(ActionEvent e) {
   	if(e.getSource()==pegsolitaire.save){
   System.out.println ("save");
     int answer = JOptionPane.showConfirmDialog(pegsolitaire,"Etes-vous sûr de vouloir enregistrer?", null,JOptionPane.YES_NO_OPTION);

                if (answer == JOptionPane.YES_OPTION) {

                  try{

                   MyGame.saveGame(pegsolitaire, "y.svg");  
                  }
                  catch(IOException ex){
                  	 ex.printStackTrace();
                  }  

                }
        }

مع اني حاطة الزر save داخل pegsoliter بس اعتقد ما بيسبب مشكله لانه مستدعيته مع اسم الكلاس

المفروض عند الضغط على زر save ع الاقل يظهر رسالة لاختيار ملف

ولكن لا يحدث شي نهائيا

#18

طيب وين الregistration للــ listener يعني فين عملتي addActionListener للزر؟

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#19
mental-driller كتب:

طيب وين الregistration للــ listener يعني فين عملتي addActionListener للزر؟

داخل الكلاس pegsoliter وهناك عرفت الازرار واضفتها على البنل ايضا

#20

شيلي الكود هذا الى داخل actionPerformed في pegsoliter

if(e.getSource()==pegsolitaire.save){
   System.out.println ("save");
     int answer = JOptionPane.showConfirmDialog(pegsolitaire,"Etes-vous sûr de vouloir enregistrer?", null,JOptionPane.YES_NO_OPTION);

                if (answer == JOptionPane.YES_OPTION) {

                  try{

                   MyGame.saveGame(pegsolitaire, "y.svg");  
                  }
                  catch(IOException ex){
                         ex.printStackTrace();
                  }  

                }

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#21

لقد قمت بتغيير الكود

ونقلت الازرار الى mypaint واصبح pegsoliter لا علاقة له بالحفظ او الفتح

وظهرت الرسالة ولكن هناك اكسبشن

Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission t.txt writ

اعتقد سببه اسم الملف

المتغير الذي يجب ان ارسله بدلا من البارميتر filein ما هو ؟؟

يعني لو اردت حفظه في نفس الملف الذي اعمل فيه وافتحه منه نفسه ماذا ارسل له

وهل يمكن تحويله الى file chooser ؟؟؟؟؟؟؟؟

هذا هو الملف المعدل

pegSoliter.rar

#22

هذا هو الاكسبشن

--------------------Configuration: <Default>--------------------
save
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission s.html write)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
    at MyGame.saveGame(MyGame.java:13)
    at myPaint.actionPerformed(myPaint.java:43)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6263)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6028)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Process completed.

انا وضعت ال filepath اسم ملف بامتداد html لاني استخدم ابلت

هل يجب ان اضع امتداد غير ؟؟

تم تعديل هذه المشاركة بواسطة ريحانة الاقصى في 3 سبتمبر 2011 في 13:31

#23

هذا security exception يعني تحتاجي لعمل applet signing ارجعي واقرأي عن sand boxing

اذا امكن ان اضيف تعليقا حول برنامجك

في الكلاس الخاص بالحفظ قمت بعمل serialization بشكل مباشر لــheavy components وهذا يعد اسلوب ضعيف نوعا ما لتطبيق هذه الخاصية

ارجعي واقرأي عن هذا الموضوع في effective java: Item 74 كتاب مهم جدا

تحياتي

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

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