我正在使用eclipse,two TextField
one text field contains IP address
和other contains normal text entry
。
当第一个文本字段包含本地系统的IP地址时,我可以在第二个文本字段中插入文本,而当IP是某个其他系统时
我必须禁用第二个文本字段。
我在第一个文本字段中添加了修改侦听器,用于检查是否启用/禁用第二个文本字段。
My problem is when I type IP address then on every keystroke system hangs up
for some seconds.
我在我的modifyText函数中使用此代码
// Here ipAdd is the value of the first Text field on which i have add Modify Listener
InetAddress addr = InetAddress.getByName(ipAdd);
byte[] ipAddr = addr.getAddress();
String ipAddrStr
for (int i = 0; i < ipAddr.length; i++)
{
if (i > 0)
{
ipAddrStr += ".";
}
ipAddrStr += ipAddr[i] & 0xFF;
}
// ipAddrStr contains the IP address
// For finding name of local host
String ownSysName = InetAddress.getLocalHost().getHostName();
为什么每次按键后都会有一种骚动。?
请建议任何更好的方法来实现这一目标。
提前致谢。
答案 0 :(得分:1)
我认为它会挂起,因为你在EDT thread执行此操作,而InetAddress.getLocalHost().getHostName();
需要相对较长的时间来执行。
您应该在后台线程中执行所有花费更多时间的操作。
答案 1 :(得分:1)
看起来你在每次击键后都试图获取本地机器的主机名。您应该获取本地计算机的主机名一次,然后将其存放在某处。
另外,一旦用户输入完整的IP地址(当键入的字符串与描述IP地址的正则表达式匹配时),您应该只对输入的IP地址和本地主机的IP地址进行比较正如http://www.regular-expressions.info/examples.html所述。比较每次击键似乎都是浪费精力。你知道他们是否只键入了一个不是你正在寻找的IP地址的字符。
答案 2 :(得分:0)
一些可能性:
最好能够分析代码。 JVisualVM可在大多数系统上使用,可以为您提供快速的建议。或者,您可以查看繁忙线程的堆栈跟踪,并查看在系统挂起时刷新视图后仍然存在哪些方法。
此外,如果您的目标是禁用其中一个文本编辑器,则无需对每个键击进行评估。您可以评估可编辑性,例如当第二个文本字段获得焦点或焦点从第一个文本字段移出时。