当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·紧为什么我的程序不能设断点    »显示摘要«
    摘要: 一个工程,两个dll辅助工程,其中一个不能设断点。 ......
    摘要: 我搞了好多天都不能搞定密码大盗.它不在注册表的run选项.在windows2000的进程里也发现不了....... 真是奇怪,windows密码大盗应是一种黑客软件,但是为什么我们的杀毒软件却发现不了它. 请问它安装在哪里?是怎样启动的?? 大家能不能讨论一下..... 附: 密码大盗下载地址: http://www.ttian.net/download/show.php?id=341 ......


怎么这个requestFocus()不好使 看似简单的问题怎么在我的程序中就不行ivjJTextField1.requestFocus()得不到焦点问题出在哪里

几乎是书中的例程:我想不应该发声,可事实就是不行!  
   
  为了知道ivjJTextField1中的文本是否合法,故在ivjJTextField1失去焦点时加以判断,如果不合法则ivjJTextField1继续得到焦点;可现在执行效果是成功提示错误信息,但焦点却轮流到下一个文本域ivjJTextField2中!  
   
  现在我想错误可能不在这里,会是别处的错误原因!  
   
  请各位有兴趣研究的看看下面的源程序:看具体出错在哪里?  
   
  具体情况是:ivjJTextField1.setRequestFocusEnabled(true);  
   
  监听事件为内部类:  
  class   IvjEventHandler   implements   java.awt.event.ActionListener,   java.awt.event.FocusListener,   java.awt.event.MouseListener,   javax.swing.event.ChangeListener   {  
  public   void   focusGained(java.awt.event.FocusEvent   e)   {}  
  public   void   focusLost(java.awt.event.FocusEvent   e)   {  
  if   (e.getSource()   ==   Bill.this.getJTextField1())    
  connEtoC4(e);  
  }  
   
   
  private   void   connEtoC4(java.awt.event.FocusEvent   arg1)   {  
  try   {  
  this.jTextField1_FocusLost(arg1);  
  }   catch   (java.lang.Throwable   ivjExc)   {  
  handleException(ivjExc);  
  }  
  }  
   
  原程序为:  
   
  public   void   jTextField1_FocusLost(java.awt.event.FocusEvent   focusEvent)   {  
  if   (!focusEvent.isTemporary())   {  
  if   (!checkMIDFormat(ivjJTextField1.getText().trim()))   {  
  ivjJTextField1.requestFocus();  
                                        JOptionPane.showMessageDialog(  
  null,  
  "请正确输入手机号码!",  
  "输入错误",  
  JOptionPane.ERROR_MESSAGE);  
  }  
  }  
  return;  
  }  
   
  谢谢!

NO.1   作者: fightboy

把ivjJTextField1.requestFocus();  
  改为:  
   
  javax.swing.SwingUtilities.invokeLater(new   Runnable{  
   
          public   void   run()  
          {  
                  ivjJTextField1.requestFocus();  
          }  
  });    
   
  并且不要问为甚么  
   
 

NO.2   作者: myteacher

up   for   gz

NO.3   作者: shihb

这个很好解释!  
  你想想,如果你的lostfocus成立,你原来的程序就会要求得到焦点,即requestfocus,可是这个时候,你又要弹出一个message,所以就又会lostfocus,这个时候系统该怎么做呢?就会一个紧的循环了!所以我们用一个线程来解决,把requestfocus放到最后做!明白了吗?

NO.4   作者: fightboy

invokeLater这个东西很复杂,  
  在java   swing中有一个线程叫做事件派发线程   AWT-Dispather-Thread  
  所有画面部分的更新修改等事件就是在这个线程中等待处理的  
  你的lostFocus没有加错,但是由于在执行你的LostFocus的事件listener之后  
  系统还有其它的事情要作   在干了其它的事情之后,focus就跑到其它地方去了  
  通过调用   invokeLater   把一个新的事件   放到这个事件派发线程的最后,   这样等其它的调用完成之后,   就乖乖的执行你的   run   ,   把focus抢回来  
   
  不知道说清楚了没有

NO.5   作者: javaunix1210

swing组件的requestFoucs()方法是一个Bug

NO.6   作者: fightboy

是的,在java的文档中这样说了:  
   
  Prior   to   Java   2   Standard   Edition,   JDK   1.4,   the   AWT   focus   subsystem   was   inadequate.   It   suffered   from   major   design   and   API   problems,   as   well   as   over   a   hundred   open   bugs.   Many   of   these   bugs   were   caused   by   platform   inconsistencies,   or   incompatibilities   between   the   native   focus   system   for   heavyweights   and   the   Java   focus   system   for   lightweights.    
   
  看到没有:over   a   hundred   open   bugs  
   
  我狂faint  
   
  但是这里应该是另当别论  
   
  如果你用的多了就会知道有很多时候都要调用这个invokeLater的!  
   
  特别是如果你在多线程中改了界面元素的时候  
 


    摘要: 这儿有这方面的经验人士么? 能不能推荐一些学习资料或经验? :) 谢谢! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE