我正在使用eclipse,我有two TextField
这样的one text field contains IP address
和other contains normal text entry
。当第一个文本字段包含本地系统的IP地址,我可以在第二个文本字段中插入文本,而当IP是其他一些系统我必须禁用第二个文本字段。
我在第一个文本字段上添加了modify Listener,用于检查是否启用/禁用第二个文本字段。
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();
为什么每次击键后都会有停顿?
请提出更好的方法来实现这一目标。
看起来您试图在每次击键后获取本地计算机的主机名。您应该获得一次本地机器的主机名,并将其保存在某个地方。
另外,只有在用户键入整个IP地址(当键入的字符串匹配描述IP地址的正则表达式,例如http://www.regular-expressions.info/examples.html)之后,您才应该对输入的IP地址和本地主机的IP地址进行比较。比较每一次击键似乎是浪费精力。你知道如果他们只输入了一个字符那就不是你要找的IP地址
我认为它挂起是因为您在EDT线程中执行此操作,而InetAddress.getLocalHost().getHostName();
执行时间相对较长。
你应该在后台线程中完成所有花费更多时间的操作。
一些可能性:
- 您可能正在修改来自侦听器的文本字段中的值再转叫听者等等。
如果你能分析代码将是最好的。JVisualVM在大多数系统上都可用,可以让您快速了解。或者,您可以查看繁忙线程的堆栈跟踪,并查看在系统挂起时刷新视图后仍然存在的方法。
同样,如果您的目标是禁用其中一个文本编辑器,则不需要对每个按键进行评估。你可以评估可编辑性比如当第二个文本字段有焦点或者焦点从第一个文本字段移出