import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasChildFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
public class huilvzhuanhuan {
public static void main (String[] args) throws Exception{
     Display display = new Display ();
      Shell shell= new Shell(display);
      shell.setText("汇率转换");
      shell.setBounds(20,20,300,300);
         shell.setLayout(new GridLayout(1, true));                   
         
         Label label1=new Label(shell,SWT.SHADOW_NONE);
         label1.setBounds(20, 20, 50, 20);
         label1.setText("人民币");
         
         Text t1=new Text(shell,SWT.BORDER);
         t1.setText("171");//如何能让此处设置为空,且使软件运行正常?
         t1.setBounds(80, 20, 50, 20);
         final String s=t1.getText();//输入rmb
         
         Label label2=new Label(shell,SWT.SHADOW_NONE);
         label2.setBounds(20, 50, 50, 20);
         label2.setText("美元");
          
         final Text t2=new Text(shell,SWT.BORDER);
         t2.setBounds(80, 50, 50, 20);
       
         Button button=new Button(shell,SWT.PUSH);
         button.setBounds(60, 60, 20, 20);
         button.setText("转换");
         button.addListener(SWT.Selection,new Listener(){
          public void handleEvent(Event ev){
          String USDRMB = null;
              String tmp = null;
              float USDRMB1 = 0;                         //使用HtmlParser获取Google提供的实时汇率。
              Parser parser = null;
try {
parser = new Parser("http://www.google.cn/search?sourceid=navclient&hl=zh-CN&ie=UTF-8&rlz=1T4XNLA_zh-CNCN296CN297&q=USD%2fRMB");
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
              try {
parser.setEncoding("GB2312");
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
              NodeFilter filter=new AndFilter(new TagNameFilter("table"),
                   new HasChildFilter(new TagNameFilter("tr")));
              //TagNameFilter filter = new TagNameFilter("td");
                 
              NodeList nl = null;
try {
nl = parser.parse(filter);
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
              
              for(int i =1;i <nl.size();i++){
              tmp = nl.elementAt(i).toPlainTextString();
              if (tmp.indexOf("1美元 /人民币")>=0){USDRMB=nl.elementAt(i).toPlainTextString();;}
              }
             USDRMB=USDRMB.replaceAll(" ","");
             USDRMB=USDRMB.replaceAll("&nbsp;","");               USDRMB1 = Float.parseFloat(USDRMB.substring(8,18));//汇率获取完毕。
              
          float m = 0;   
           m=(float) (Float.parseFloat(s)/USDRMB1*31.1034768);
          t2.setText(""+m);
        
         }});
    
    
    shell.open(); 
    while(!shell.isDisposed()){
     if(!display.readAndDispatch())  display.sleep();
        }
    display.dispose();
    }
}

解决方案 »

  1.   

    LS的方法会使软件运行出现错误,提示Exception in thread "main" java.lang.NumberFormatException: empty String
      

  2.   

    代码有点乱  你试试 
    把 m=(float) (Float.parseFloat(s)/USDRMB1*31.1034768); 
            t2.setText(""+m); 
    放到判断里
    对s进行下判断·~
    if (s != null && !s.trim().equals("")){
        m=(float) (Float.parseFloat(s)/USDRMB1*31.1034768); 
            t2.setText(""+m); 
    }
      

  3.   

    //m=(float) (Float.parseFloat(s)/USDRMB1*31.1034768); 
    try
    {
        m=(float) (Float.parseFloat(s)/USDRMB1*31.1034768); 
        t2.setText(""+m); 

    catch
    {
        t2.setText("0"); 
    }这样,人民币没有输入或者输入0时,当然美元都是0了。
      

  4.   

    发现s被定为final了,我再修改下试试。