注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

千鸟

本blog所有日志均系原创 转载请注明出处

 
 
 

日志

 
 

java化学数据分析利器jchem笔记3:marvin上场  

2007-04-07 11:01:20|  分类: J2EE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

java化学数据分析利器jchem笔记3:marvin上场 - souljava - 千鸟

1.配置marvin页面

    我这里因为路径的问题解决起来很麻烦.

    a.经过了我无数次的删减,发现页面(quarry.jsp)要显示浏览器端的marvin必须要用到的 marvin目录中的下面几个文件: jmarvin.jar,marvin.jar,marvin.js,文件夹sjars chemaxon.

 这些文件要保证在一个目录下  

    b.配置quarry.jsp

<script LANGUAGE="JavaScript1.1" ></script>

导入正常可以显示marvin的正常页面. 下面是配置这个marvin

<script LANGUAGE="JavaScript1.1">

            msketch_name="msketch";  //实体名 一定要写,后面要用到marvin和javascrpt的通信

            msketch_begin("../..", 440, 400); 

            msketch_param("bgcolor", "#b0b0b0");

            msketch_param("molbg", "#F0F0F0");

            msketch_param("implicitH", "off");

            msketch_param("undo", "50");

            msketch_param("mol","");//放入一个mol文件就能显示如:mols-2d/caffeine.mol

            msketch_param("preload", "MolExport,GraphInvariants,Parity");

            msketch_end();//-->

</script>

然后要和javascrpt的通信

function submitIfLoaded(whatToDo)

  form = document.queryForm;  //建个表单

 form.action = "http://localhost:8080/jsp1_x/servlet/xmlout" ; //目标

 form.molfile.value = document.msketch.getMol('smiles'); //msketch上面被初始化过的实体

     //getMol()里面要几个可选参数mol/mrv /smiles 当然是提交分子式了                                  

   form.submit();  //提交表单就 ok了

}

2.运行bat文件的问题

          String newcmd="cmd.exe /c start /min generfp.bat -f1 -s \"n\" <d:/new.smi> d:/ddd.fp ";

          Runtime   r   =   Runtime.getRuntime();

          Process ps = r.exec(newcmd); //要运行exe 文件也可以这么写

  发现的奇怪现象,运行bat文件不接受参数

  解决办法是,重写一个bat,(temp.bat),再由 temp.bat,调用generfp.bat:

  call D:\program\JChem\bin\generfp.bat -f1 -s "n" <"%2"> "%3"

  结果成功实现.

  如何确定bat文件已经运行完毕了?

  解决办法是:在temp.bat最后加上:  exit.然后在servlet端这样写:

  try{

       Process child = Runtime.getRuntime().exec(last);

          InputStream in = child.getInputStream();

                        int c;

                        while ((c = in.read()) != -1) {

                                System.out.print(c);//如果你不需要看输出,这行可以注销掉

                        }   //主要目的是让该线程等待,bat的返回.

                        in.close();

                        try {

                                child.waitFor();

                        } catch (InterruptedException e) {

                                // TODO Auto-generated catch block

                                e.printStackTrace();

                        }

                        in.close();

                   System.out.println("done");         } catch (IOException e) {

        e.printStackTrace();

        }catch(Exception e){

         e.printStackTrace();

        }

 最后如果有必要,在bat里加上 del "%2",删除中间产生的临时文件

  评论这张
 
阅读(596)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017