[Java] جافا أونكليك المستمعين


Answers

Question

لدي برنامج بسيط يسمح 2 عملاء للاتصال بملقم.

مرة واحدة متصلة، ويمكن أن يتناوبون على النقر على صورة بطاقة فارغة.

وبمجرد أن ينقر أي من العملاء 2 على صورة بطاقة فارغة، فإن صورة بطاقة تتغير إلى صورة نادي الآس.

سيتم عرض التغييرات على كلا الجانبين من العميل وسيتم تعطيل فوق لكلا العملاء.

بعد 2 ثانية، فإنه يتغير مرة أخرى إلى صورة بطاقة فارغة والعميل قادر على النقر مرة أخرى.

مشكلة

أنا قادرة على إظهار نادي آيس صورة على كلا الجانبين بعد عميل قد نقر، ولكن عندما تتغير الصورة مرة أخرى إلى صورة بطاقة فارغة بعد 2 ثانية، وأنا لست قادرا على النقر عليه بعد الآن.

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

public void run() {

    while(true) {
        try {
            while (true) {
                response = is.readLine();
                if(!response.equals("")) {
                    System.out.println(response);
                    responded = true;
                }
                break;
            }
        } catch (IOException e) {
            System.err.println("IOException:  " + e);
        }
        if(responded) {
            timer = new Timer(1000,new TimerC());
            timer.start();
            responded = false;
        }
    }
}

هنا هو بلدي رمز كامل لبلدي العميل. الرجاء المساعدة

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.ImageIcon;
import javax.swing.Timer;

public class Client implements Runnable {

    static Socket clientSocket = null;
    ObjectInputStream in = null;
    String serverMsg;
    static PrintStream os = null;
    static DataInputStream is = null;
    static boolean closed = false;
    static String s = "";
    static String cardType = "";
    static GameUI gameUI;
    int countdown = 3;
    Timer timer = new Timer(1000,null);
    String response = null;
    boolean  responded = false;

    public static void main(String args[]) {
        try {
            clientSocket = new Socket("localhost", 5550);
            os = new PrintStream(clientSocket.getOutputStream());
            is = new DataInputStream(clientSocket.getInputStream());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        gameUI = new GameUI();

        gameUI.cardOne.addMouseListener(new MouseAdapter()  
        {  
            public void mouseClicked(MouseEvent e)  
            {  
                s = gameUI.cardOne.getText();

            }  
        }); 

        if (clientSocket != null && os != null && is != null) {
            try {
                new Thread(new Client()).start();
                while (!closed) {
                    os.println(s.trim());
                }

                os.close();
                is.close();
                clientSocket.close();
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }

    }

    public void run() {
        try {
            while (true && !responded) {
                response = is.readLine();
                if(!response.equals("")) {
                    System.out.println(response);
                    responded = true;
                    break;
                }
            }

        } catch (IOException e) {
            System.err.println("IOException:  " + e);
        }

        if(responded) {
            timer = new Timer(1000,new TimerC());
            timer.start();
            responded = false;
        }
    }

    class TimerC implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            if(countdown == 0) { 
                timer.stop();
                gameUI.cardOne.setIcon(new ImageIcon(GameUI.revealCard("blank.png")));
                countdown = 3;
            }

            else {
                gameUI.cardOne.setIcon(new ImageIcon(GameUI.revealCard(response)));
                countdown--;
                System.out.println(countdown);

            }  
        }
    }
}