2011-11-18 79 views
1

我正在使用eclipse,并且我有two TextField,例如one text field contains IP addressother 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(); 

为什么有每个按键后hault使用此代码?

请提出到实现这一目标的任何更好的办法。

在此先感谢。

回答

1

它看起来像你想每次键击后获取本地机器的主机名。您应该获取本地计算机的主机名,并将其保存在某处。

另外,一旦用户键入完整的IP地址(当输入的字符串与描述IP的正则表达式匹配时,您应该只是在输入的IP地址和本地主机的IP地址之间进行比较地址,例如在http://www.regular-expressions.info/examples.html处描述的)。比较每个击键看起来像是浪费能量。你知道他们是否只输入了一个不是你正在寻找的IP地址的字符。

+0

谢谢,它的工作很好。 – user628083

1

我想它会挂起,因为你在EDT thread中这样做,而InetAddress.getLocalHost().getHostName();需要相对较长的时间来执行。

你应该做的一切,花费更多的时间在后台线程的操作。

0

一些可能性:

  • 你可能会修改文本字段从听众值,其在 反过来再等等呼吁听众。
  • 某些方法可能是昂贵的。

这将是最好的,如果你可以分析代码。 JVisualVM在大多数系统上都可用,并且可以为您提供快速构思。或者,您可以查看繁忙线程的堆栈跟踪,并查看系统挂起后刷新视图后仍存在哪些方法。

此外,如果你的目标是禁用的文本编辑器之一,你不必做评价上的每个击键。当第二个文本字段获得焦点或焦点从第一个文本字段移出时,您可以评估可编辑性。

相关问题