Как получить значение переменной из другого метода, не передавая его в качестве аргумента? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать приложение для чата (да, я знаю, не очень креативно) и хочу передать значение переменной сокета в другой метод.

Но я слишком озадачен тем, что мне делать?

Я уже пытался выдать его за аргумент, который по какой-то причине не работает, также пытался объявитьпеременные вне метода, который также не работает.

    public void DeclaringVariables() throws IOException{

        InetAddress group = InetAddress.getByName("239.255.255.255"); 
        int port = 1201; 
        Scanner sc = new Scanner(System.in); 
        System.out.print("Enter your name: "); 
        name = sc.nextLine(); 
        MulticastSocket socket = new MulticastSocket(port); 

        // Since we are deploying 
        socket.setTimeToLive(0); 
        //this on localhost only (For a subnet set it as 1) 

        socket.joinGroup(group); 
        Thread t = new Thread(new
        ReadThread(socket,group,port)); 

            // Spawn a thread for reading messages 
        t.start();

    }          

/**
 *
 */
public void SendButton() {

    try {

        while(true) {

                String message; 
                message = sc.nextLine(); 
                if(message.equalsIgnoreCase(GroupChat.TERMINATE)) 
                { 
                    finished = true; 
                    socket.leaveGroup(group); 
                    socket.close(); 
                    break; 
                } 
                message = name + ": " + message; 
                byte[] buffer = message.getBytes(); 
                DatagramPacket datagram = new
                DatagramPacket(buffer,buffer.length,group,port); 
                socket.send(datagram); 

    }
    } 

    catch (IOException ex) {
        Logger.getLogger(ChatGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
    }

1 Ответ

0 голосов
/ 05 февраля 2019

Если вам нужно socket в более чем одном методе, рассмотрите возможность объявления его как атрибут класса, а не как локальная переменная.Таким образом, вы можете создать его экземпляр в конструкторе класса и получить к нему доступ через все методы класса.Как это:

public class MyClass {

    // declare it here
    private MulticastSocket socket;

    public MyClass() {
        // instantiate it here
        socket = new MulticastSocket(1201); 
    }

    public void myMethod() {
        // now you can use it everywhere!
        socket.someMethod();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...