获取void输出到变量

时间:2017-12-08 13:49:38

标签: java eclipse

我的项目中有2个.java文件,我希望其中一个文件(例如在textarea中)显示位于另一个.java文件中的Enumeration的值。

这是第一个(或主要).java文件的代码 - frm1.java : (只是展示我认为代码中最相关的部分,但如果有必要,我可以完全理解)

// Things HERE
    ListNets interfaceLoader = new ListNets();
    txtrBlabla.setText(names);

txtrBlabla是为JTextArea指定的名称,ListNets是第二个.java文件的名称。

这里是第二个.java文件的内容 - ListNets.java

public class ListNets {


    public static void main(String args[]) throws SocketException {
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
            displayInterfaceInformation(netint);
    }

    public static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
        out.printf("Display name: %s\n", netint.getDisplayName());
        out.printf("Name: %s\n", netint.getName());
        Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
     String names = inetAddresses.toString(); //<-- This line is the only thing not "copy-pasted"
     } 
}

如您所见,第二个代码只是复制和粘贴。 我已经尝试了许多方法将枚举的结果变为变量,然后尝试使用txtrBlabla.setText(names);行将其设置为textarea,但总是收到错误消息:

  

名称无法解析为变量

在主java文件中。 我也看到过与“空洞”有关的东西,但没有尝试它的结果。 我也尝试过更改变量,但我都没有工作。

注意: 我是JAVA的首发,但我真的很想知道为什么这不起作用。 对不起,请提前填写拼写和谢谢。

修改 还尝试将所有内容放在同一个.java文件中,如下所示:

public static void main(String args[]) throws SocketException {
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
            displayInterfaceInformation(netint);
    }

    static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
        out.printf("Display name: %s\n", netint.getDisplayName());
        out.printf("Name: %s\n", netint.getName());
        Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
     String names = inetAddresses.toString();
     }

        txtrBlabla.setText(displayInterfaceInformation.names);

2 个答案:

答案 0 :(得分:0)

可变范围是您的问题。

看看这个:

http://www.java2s.com/Tutorial/Java/0020__Language/VariableScope.htm

变量的范围是程序中可以引用变量名称的部分。 (来自Ivor Horton的Beginning Java 2,Ivor Horton的JDK 5版)

您无法在声明之前引用变量。

您可以在多个不同的地方声明变量:

  • 在类体中作为类字段。此处声明的变量称为类级变量。
  • 作为方法或构造函数的参数。
  • 在方法的主体或构造函数的主体中。
  • 在一个语句块中,例如在一段时间内或用于阻止。

转到链接,了解有关可变范围的更多信息。

答案 1 :(得分:0)

实际上不需要这一行:

String names = inetAddresses.toString();

相反,我会将InetAddress对象的枚举转换为字符串,然后将其返回以供以后使用。一些事情:

public static String getNetworkInformation(NetworkInterface netint) throws SocketException {
    Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
    StringJoiner joiner = new StringJoiner(",");
    while(inetAddresses.hasMoreElements()) {
        InetAddress inetAddress = inetAddresses.nextElement();
        joiner.add(inetAddress.toString());
    }
    return joiner.toString();
}

顺便说一句:尝试通过调用java.util.EnumerationtoString()转换为字符串不会在Java中产生任何有意义的字符串。

您可以尝试使用此代码here in JDoodle。此Doodle中的源代码将输出打印到控制台,但在您的情况下,您只需将其输出到UI。