Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Крестики нолики, события 
:(
    Опции темы
DenWPF
Дата 3.10.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Сервер есть, он принимает строку вида x=value:y=value;


Теперь клиент.

Создаю форму:
и тут сразу вопрос как подключить к кнопкам слушатель события?

Код

        setLayout (new GridLayout(3, 3));    // 3 rows, 3 columns, no gaps
        Button b;
        int i=0;
        for (int row = 0; row < 3; row ++)
        {
            b = new Button();
            b.setName("Button:X="+i+":Y="+row);
            add (new Button());
            b = new Button();
            b.setName("Button:X="+i+":Y="+row);
            add (new Button());
            b = new Button();
            b.setName("Button:X="+i+":Y="+row);
            add (new Button());
            i++;
        }


далее подключаюсь:

Код

Socket kkSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    void Client() throws IOException
    {
        try {
            kkSocket = new Socket("localhost", 3123);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection.");
            e.printStackTrace();
            System.exit(1);
        }
    }


а это то что должно быть при каждом клике.(отправка сообщения)
но как видете оно у меня не верно, потому что я не понимаю где и как это делать.

Код

    void Send(Object b) throws IOException
    {
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
        String fromUser;

        while ((fromUser = stdIn.readLine()) != null) {
            if (fromUser.equalsIgnoreCase("bye")) {
                break;
            }
            out.println(fromUser);
            System.out.println("Send to server: " + fromUser);
            fromServer = in.readLine();
            System.out.println("Received from server: " + fromServer);
        }
        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }


 smile 

PM MAIL   Вверх
jk1
Дата 4.10.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Цитата

и тут сразу вопрос как подключить к кнопкам слушатель события?

Код

button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              // разместите здесь все, что должно произойти при нажатии на кнопку
            }
        });



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
DenWPF
Дата 5.10.2010, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



это анонимный! 

я уже разобрался как нормальный создавать...

а вот как отключить слушатель из самого себя я не понял
PM MAIL   Вверх
jk1
Дата 5.10.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Цитата

это анонимный! 

я уже разобрался как нормальный создавать...

А чем анонимный не "нормальный"?  smile 
Цитата

а вот как отключить слушатель из самого себя я не понял 

Этот обработчик при нажатии на кнопку удалит самого себя, с "нормальным" по аналогии
Код

        final JButton button = new JButton();
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button.removeActionListener(this);
            }
        });

В случае когда в контексте обработчика нет ссылки на кнопку-источник, работает вот такой подход:
Код

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ((JButton)e.getSource()).removeActionListener(this);
            }
        });


Это сообщение отредактировал(а) jk1 - 5.10.2010, 09:18


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
DenWPF
Дата 5.10.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



ага спасибо вот только что сам разобрался.
сейчас трабл со связью на втором ходе человека выдает такое:


Цитата

05.10.2010 11:12:34 noughtsandcrosses.Main$CommandButton actionPerformed
SEVERE: null
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at noughtsandcrosses.Main.Send(Main.java:118)
        at noughtsandcrosses.Main$CommandButton.actionPerformed(Main.java:76)
        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.Window.dispatchEventImpl(Window.java:2478)
        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)

с чем это может быть связано
PM MAIL   Вверх
jk1
Дата 5.10.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Цитата

с чем это может быть связано


Приводите код, желательно полностью. Без этого точную причину назвать сложно.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
DenWPF
Дата 5.10.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Сервер:
Код

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import java.util.Vector;

/**
 *
 * @author User
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(3123);
        Socket acceptor = socket.accept();
        PrintWriter out = new PrintWriter(acceptor.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(acceptor.getInputStream()));
        String input = null;
        Vector<Point> mass = new Vector<Point>();
        Random r = new Random();
        while ((input = in.readLine()) != null){
            
            mass.add(new Point(input, 0));

            if(mass.size()==9)
            {}

            int randX =-1;
            int randY = -1;
            while(true)
            {
                randX = r.nextInt(3);
                randY = r.nextInt(3);
                for (int i = 0; i < 9-mass.size(); i++)
                {
                    if(mass.elementAt(i).getX() != randX && mass.elementAt(i).getY() != randY)
                    {
                        Point newp = new Point(randX+":"+randY+":1");
                        mass.add(newp);
                        out.println("Button:"+randX+":"+randY);
                        break;
                    }
                }
            }
        }
    }
}


у меня классы поинты нужны для сервера и клиента различаются..это все из-за лени:

Код

package slovaserver;

/**
 *
 * @author User
 */
public class Point {

    @Override
    public String toString() {
        return x+":"+y+":"+value;
    }


    private int x;
    private int y;
    private int value;
    public Point(int x, int y, int value) {
        this.x = x;
        this.y = y;
        this.value = value;
    }
    public Point(String str) {
        String[] s = str.split(":");
        this.x = Integer.parseInt(s[0].toString());
        this.y = Integer.parseInt(s[1]);
        this.value = Integer.parseInt(s[2]);
    }

    public Point(String str, int value) {
        String[] s = str.split(":");
        this.x = Integer.parseInt(s[1].toString());
        this.y = Integer.parseInt(s[2]);
        this.value = value;
    }
    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }

    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }

}



клиент:
Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package noughtsandcrosses;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JComponent;

/**
 *
 * @author User
 */
public class Main extends JFrame {

    public Main() throws IOException{
        super();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //this.setLayout(null);
        this.setSize(250,250);

        GridLayout gl = new GridLayout(3, 3);
        setLayout (new GridLayout(3, 3));    // 3 rows, 3 columns, no gaps
        JButton b;
        
        for (int row = 0; row < 3; row ++)
        {
            int i=0;
            b = new JButton();
            b.setName("Button:"+i+":"+row);
            i++;
            b.addActionListener(new CommandButton());
            add (b);
            b = new JButton();
            b.addActionListener(new CommandButton());
            b.setName("Button:"+i+":"+row);
            i++;
            add (b);
            b = new JButton();
            b.setName("Button:"+i+":"+row);
            b.addActionListener(new CommandButton());
            add (b);

            
        }
      


        Client();


    }
    class CommandButton implements ActionListener
    {

        public void actionPerformed(ActionEvent e) {
                try {
                    JButton jb = (JButton)e.getSource();

                    jb.setBackground(Color.red);
                    Send(jb);

        jb.removeActionListener(this);
                    
                } catch (IOException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

    }



    Socket kkSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
     BufferedReader stdIn = null;
    void Client() throws IOException
    {
        try {
            kkSocket = new Socket("localhost", 3123);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
            stdIn = new BufferedReader(new InputStreamReader(System.in));
        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection.");
            e.printStackTrace();
            System.exit(1);
        }
    }
    void Send(JButton b) throws IOException
    {
        
        String fromServer;
        String fromUser;

        fromUser = b.getName();
        out.println(fromUser);
        System.out.println("Send to server: " + fromUser);
        fromServer = in.readLine();
        this.getComponents();
        //Найти Кнопку нажатую и задать задний фон и удалить обработчик
        Component[]x=this.getContentPane().getComponents();
        for(int i=0;i<x.length;i++)
        {
            JButton but = (JButton)x[i];
            if(but.getName().equals(fromServer))
            {
                but.setBackground(Color.blue);
                but.removeActionListener(but.getActionListeners()[0]);
                stdIn.close();
                break;
            }


        }
        System.out.println("Received from server: " + fromServer);
        
    }
void Close() throws IOException
{
    out.close();
    stdIn.close();
        in.close();
        kkSocket.close();

}

    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        Main form = new Main();
        form.setVisible(true);
form.setResizable(false);
    }

}

клиент поинт 

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package noughtsandcrosses;

/**
 *
 * @author User
 */
public class Point {

    @Override
    public String toString() {
        return x+":"+y+":"+value;
    }


    private int x;
    private int y;
    private int value;
    public Point(int x, int y, int value) {
        this.x = x;
        this.y = y;
        this.value = value;
    }
    public Point(String str) {
        String[] s = str.split(":");
        this.x = Integer.parseInt(s[0].toString());
        this.y = Integer.parseInt(s[1]);
        this.value = Integer.parseInt(s[2]);
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }

}


PM MAIL   Вверх
jk1
Дата 7.10.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Причина в том, что Вы два раза пытаетесь удалять обработчик с кнопки. Поправленный вариант:
Код

 for (int i = 0; i < x.length; i++) {
            JButton but = (JButton)x[i];
            if (but.getName().equals(fromServer)) {
                but.setBackground(Color.blue);
                //but.removeActionListener(but.getActionListeners()[0]);
                stdIn.close();
                break;
            }
        }



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.