【问题标题】:How do i retrieve a value from method level scope?如何从方法级别范围中检索值?
【发布时间】:2017-03-04 22:48:32
【问题描述】:
private void receive() {
            receive = new Thread(new Runnable() {
            public void run() {
                while (running) {
                        byte[] data = new byte[MAX_PACKET_SIZE];
                        DatagramPacket packet = new DatagramPacket(data, data.length);
                    try {
                        socket.receive(packet);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    String str = new String(packet.getData());
                    System.out.println(str);
                }
            }
        }, "receive");
        receive.start();
    }

我需要检索一个源端口,如下所示:

packet.getPort()

但我不知道我该怎么做。每次我尝试时,当它超出范围时,该值设置为零,因此它只存在于 run 方法中,甚至存在于 while 循环中。

【问题讨论】:

标签: java sockets networking


【解决方案1】:

匿名类只能引用final 变量,但这些变量不必是immutable。这里一个不错的选择是AtomicInteger

final AtomicInteger port = new AtomicInteger();

然后在您的可运行文件中:

port.set(packet.getPort());

然后在外面:

receive.start();
receive.join();
System.out.println(port.get());

您还需要调用join(),因为start() 不是同步的或确定的。如果其他地方需要该值,您可以返回/传递port,这是线程安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多