我的项目中有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);
答案 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.Enumeration
将toString()
转换为字符串不会在Java中产生任何有意义的字符串。
您可以尝试使用此代码here in JDoodle。此Doodle中的源代码将输出打印到控制台,但在您的情况下,您只需将其输出到UI。