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

[تنبيه - استخدم البحث :]ما هو الخطأ في الكود

بدأه ms.roben في 7 سبتمبر 2011 · 5 رد · 667 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا عملت برنامج للعبه xo

بــ gui

وما كان فيله اخطاء

لكن اذا اعدت التشغيل اكثر من مره فاحيانا يطلع النتيجه قبل ما يخلص اللاعب ويحدد فايز من عنده

واحيانا يشتغل تمام

فما اعرف اش المشكله

هذي تطلع لي بالاحمر

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.text.PlainView.updateMetrics(PlainView.java:188)
        at javax.swing.text.PlainView.updateDamage(PlainView.java:501)
        at javax.swing.text.PlainView.insertUpdate(PlainView.java:425)
        at javax.swing.text.FieldView.insertUpdate(FieldView.java:276)
        at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1590)
        at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1849)
        at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
        at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
        at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
        at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
        at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
        at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
        at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
        at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639)
        at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
        at javax.swing.JComponent.processKeyBindings(JComponent.java:2886)
        at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
        at java.awt.Component.processEvent(Component.java:6066)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4652)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
        at java.awt.Component.dispatchEventImpl(Component.java:4524)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
        at java.awt.EventQueue$2.run(EventQueue.java:617)
        at java.awt.EventQueue$2.run(EventQueue.java:615)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
        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)
BUILD SUCCESSFUL (total time: 25 seconds)

وهذا كود البرنامج معليش امكن مش مرتب

class xo extends JFrame
{
    JTextField r1c1 = new JTextField();
    JTextField r1c2 = new JTextField();
    JTextField r1c3 = new JTextField();
    JTextField r2c1 = new JTextField();
    JTextField r2c2 = new JTextField();
    JTextField r2c3 = new JTextField();
    JTextField r3c1 = new JTextField();
    JTextField r3c2 = new JTextField();
    JTextField r3c3 = new JTextField();
    JButton  note   = new JButton("NOTE");
    JButton  startPlaying = new JButton("START PLAYING");
    JLabel hello=new JLabel("    Hello Dear in XO Game");
    JPanel screen   = new JPanel();
    Font font = new Font("SansSerif", Font.BOLD, 20);
    Container  w =getContentPane();
    static String q1="";

   public xo()
   {
   setTitle("XO Game");
   setSize(400,400);
   setLocationRelativeTo(null);
   hello.setFont(font);
   hello.setForeground(Color.red);
   w.setLayout(new BorderLayout());
   w.add(hello, BorderLayout.CENTER);
   w.add(note , BorderLayout.NORTH);
   w.add(startPlaying, BorderLayout.SOUTH);
   r1c1.setFont(font); r1c2.setFont(font);  r1c3.setFont(font);
   r2c1.setFont(font); r2c2.setFont(font); r2c3.setFont(font);
   r3c1.setFont(font); r3c2.setFont(font); r3c3.setFont(font);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   //---------------note-------------------------------
    note.addActionListener( new ActionListener()
          {
          public void actionPerformed(ActionEvent e)
              {
                    // code to be executed when button is pushed
                     JOptionPane.showMessageDialog(null , 
                     "THE ROLES IS,, \n "
                   + "1- we need two player \n"
                   + "2- each player choice differ letter to use it \n"
                   + "3- the one who can make 3 of her letter near each other will win \n"           
                   + "finaly ,, I hop  you to like my Game ,, \n Asmaa Assulami");
              }
           });
  //---------------------------start playing-----------------------------------
           startPlaying.addActionListener( new ActionListener()
          {
          public void actionPerformed(ActionEvent e)
              {
                    // code to be executed when button is pushed
                     w.removeAll();
                     SwingUtilities.updateComponentTreeUI(w);
                     hello.setText("     sTART pLAYING  ");
                     screen.setLayout(new GridLayout(3,3));
                     screen.add(r1c1);  screen.add(r1c2);  screen.add(r1c3);
                     screen.add(r2c1);  screen.add(r2c2);  screen.add(r2c3);
                     screen.add(r3c1);  screen.add(r3c2);  screen.add(r3c3);
                     w.add(hello , BorderLayout.NORTH);
                     w.add(screen , BorderLayout.CENTER);

              }// end button start playing
           });
//------------------------------------------------------------------------------
}//end of Constractor
}// end of class xo
public class Main extends xo
{
     public static void main(String[] args)
       {
       Main appl = new Main();
       appl.setVisible(true);
           while(true)
            {
            appl.look();
             appl.save();
             if(!q1.equalsIgnoreCase(""))
                appl.soul();
             else
               continue;
            break;

            }// end while
       }// end main
     public    void look()
    {
       // rows
   if(r1c1.getText().equalsIgnoreCase(r1c2.getText()) &&
           r1c1.getText().equalsIgnoreCase(r1c3.getText()) && !r1c1.getText().equalsIgnoreCase(""))
          {
          q1=r1c1.getText();
          }
   if(r2c1.getText().equalsIgnoreCase(r2c2.getText())
           && r2c1.getText().equalsIgnoreCase(r2c3.getText())&&!r2c1.getText().equalsIgnoreCase(""))
         {
           q1 = r2c1.getText();
         }
   if(r3c1.getText().equalsIgnoreCase(r3c2.getText())
              && r3c1.getText().equalsIgnoreCase(r3c3.getText())&& !r3c1.getText().equalsIgnoreCase(""))
        {
         q1 = r3c1.getText();
         }
   // coulumn
   if(r1c1.getText().equalsIgnoreCase(r2c1.getText())
             && r1c1.getText().equalsIgnoreCase(r3c1.getText())&& !r1c1.getText().equalsIgnoreCase(""))
       {
       q1=r1c1.getText();
       }
    if(r1c2.getText().equalsIgnoreCase(r2c2.getText())
             && r1c2.getText().equalsIgnoreCase(r3c2.getText())&& !r1c2.getText().equalsIgnoreCase(""))
      {
       q1 = r1c2.getText();
      }
     if(r1c3.getText().equalsIgnoreCase(r2c3.getText())
             && r1c3.getText().equalsIgnoreCase(r3c3.getText())&& !r1c3.getText().equalsIgnoreCase(""))
     {
       q1 = r1c3.getText();
      }
   // مائل
     if(r1c1.getText().equalsIgnoreCase(r2c2.getText())
             && r1c1.getText().equalsIgnoreCase(r3c3.getText())&& !r1c1.getText().equalsIgnoreCase(""))
     {
       q1 = r1c1.getText();
     }
    if(r1c3.getText().equalsIgnoreCase(r2c2.getText())
             && r1c3.getText().equalsIgnoreCase(r3c1.getText())&& !r1c3.getText().equalsIgnoreCase(""))
    {
      q1 = r1c3.getText();
    }
   //  draw
  if(!r1c1.getText().equalsIgnoreCase("") &&!r1c2.getText().equalsIgnoreCase("") &&!r1c3.getText().equalsIgnoreCase("")
  &&!r2c1.getText().equalsIgnoreCase("") &&!r2c2.getText().equalsIgnoreCase("") &&!r2c3.getText().equalsIgnoreCase("")
  &&!r3c1.getText().equalsIgnoreCase("")&&!r3c2.getText().equalsIgnoreCase("")&&!r3c3.getText().equalsIgnoreCase(""))
          q1=" you are DRAW";

    }//end of look
    public void save()
    {
    if(!r1c1.getText().equalsIgnoreCase(""))
            r1c1.setEditable(false);
    if(!r1c2.getText().equalsIgnoreCase(""))
           r1c2.setEditable(false);
    if(!r1c3.getText().equalsIgnoreCase(""))
           r1c3.setEditable(false);
    if(!r2c1.getText().equalsIgnoreCase(""))
           r2c1.setEditable(false);
    if(!r2c2.getText().equalsIgnoreCase(""))
           r2c2.setEditable(false);
    if(!r2c3.getText().equalsIgnoreCase(""))
           r2c3.setEditable(false);
    if(!r3c1.getText().equalsIgnoreCase(""))
           r3c1.setEditable(false);
    if(!r3c2.getText().equalsIgnoreCase(""))
           r3c2.setEditable(false);
    if(!r3c3.getText().equalsIgnoreCase(""))
           r3c3.setEditable(false);
    }// end of save
    public void soul()
   {
   SwingUtilities.updateComponentTreeUI(w);
   setSize(500 , 500);
   w.removeAll(); screen.removeAll();
   if(q1.equalsIgnoreCase(" you are DRAW"))
       hello.setText("      "+q1);
   else
       hello.setText("      "+q1+"  Is win ");
   screen.add(hello);
   w.add(screen , BorderLayout.CENTER);

   }// end soul
}// end of class Main

ممكن شوهوا الخطأ؟؟

#2

لقد مررت بهذا الخطأ مسبقاء والصراحة في وقتها

دمرني....... :wacko: :wacko: :wacko: :wacko:

الخطأ الظاهر لديك ان احدى المتغييرات لديك تحتوي على قيمة Null

والحل جعل قيمة اساسية لكل متغيير

تحياتي

#3

المشكلة عندك في مربعات النصوص JTextField

وذلك بسبب عدم توافق الولوج بين الActionListener والدالة look والدالة soul

لاحظ ان هذه الدوال يتم استدعاءها من الدالة main قبل ان يضغط المستخدم اصلا start وربما كان هذا اصلا سبب المشكلة

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

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


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#4

انا حاولت قبل كذا احط الوايل في زر start

ونقلت الدوال

soul and look and save

في كلاس xo

فلم تظهر اخطاء

ولكن عندما اضغط على زر start

يعلق الفريم ولازم اسويله ايقاف من النت بينز

---------------------------------------------

اخ علي انا اريد ان تكون الجي تكست فيل قيمتها null عشان اليوزر هوا الي يدخل القيم ..فما ينفع كذا ؟؟

#5

ليش مصعب الموضوع، اسهل الحلول هو عمل متغير boolean تكون قيمته false قبل ضغط الزر وعند ضغط زر التشغيل يصبح true وخلي الwhile بدل ماهي while(true) تكون مشروطه بالمتغير البوليان ، بكذه تضمن ان البرنامج ما يدخل اللوب قبل ما تضعط الزر

ms.roben كتب:

اخ علي انا اريد ان تكون الجي تكست فيل قيمتها null عشان اليوزر هوا الي يدخل القيم ..فما ينفع كذا ؟؟

ينفع بس لازم تستدعي الكونستركتور حقها كل مره تسند لها قيمة ، كمان قبل ماتفحصها في الشرط if لازم تتأكد اولا انها ليست null

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

تم تعديل هذه المشاركة بواسطة mental-driller في 8 سبتمبر 2011 في 14:58

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


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#6

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته.

مرحباً بكم في منتدى الفريق العربي للبرمجة

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

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

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…