سؤال

لدي هذه الفئات الثلاث:

يأمر:

package pack;

public abstract class Command impements java.io.Serializable
{
    public abstract void execute();
}

عميل:

package pack;

// imports....

public class Client
{
    Socket socket;

    // Constructor...

    public void sendCommand(Command c)
    {
         try
         {
              new ObjectOuputStream(socket.getOutputStream()).writeObject(c);
         } catch (Exception e) {e.printStackTrace()};
    }
}

MyKeyListener:

تتم إضافة keylistener هذا إلى مكون في JFrame.

public class MyKeyListener implements KeyListener
{

     private Client client;

     public MyKeyListener(Client c)
     { client = c; }


     public void keyTyped(....)......; // This method does nothing

     public void keyPressed(KeyEvent e)
     {
          client.sendCommand(new Command() {
               public void execute()
               {
                    new Robot().keyPress(e.getKeyCode());
               }
          });
     }

     // The same for keyRelease()....
}

المشكلة هي:إذا قمت بتشغيل الكود وأراد إرسال أمر.لكنني لا أحاول الإرسال أبدًا MyKeyListener

هل كانت مفيدة؟

المحلول

في الواقع، لا توجد الفئات المتداخلة في Java على مستوى رمز البايت - حيث يقوم المترجم بتزييفها عن طريق إدراج الحقول المخفية وطرق الوصول والمنشئات.في حالتك، الفئة الفرعية المجهولة من Command ربما يحتوي على مرجع تم إنشاؤه بواسطة برنامج التحويل البرمجي إلى MyKeyListener المثال الذي تم إنشاؤه فيه، حتى لو لم يتم استخدام هذا المرجع لأي شيء.

لإصلاح هذه المشكلة، استخدم فئة فرعية ذات مستوى أعلى من Command بدلاً من فئة مجهولة.

نصائح أخرى

تَلمِيح:حاول كتابة MyKeyListener.this.toString() في طريقة تنفيذ () فئة الأوامر (المجهولة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top