jsr223 java_使用JSR223集成jython到Java中

该博客介绍了如何利用JSR223接口在Java应用程序中集成Jython解释器,通过读取脚本文件或根据文件扩展名初始化脚本引擎,执行Python脚本并调用其定义的函数。示例代码展示了如何执行`Start`和`Stop`函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagetest.jsr223;importjava.io.*;importjava.util.*;importjavax.script.*;publicclassjsr223 {privateScriptEngine engine;staticprivateMapscriptMap=null;staticprivatevoidcreateMaps() {if(scriptMap==null) {

scriptMap=newHashMap();

ScriptEngineManager manager=newScriptEngineManager();

Listlist=manager.getEngineFactories();for(ScriptEngineFactory scriptEngineFactory : list) {

scriptMap.put(scriptEngineFactory.getEngineName(),

scriptEngineFactory);

scriptMap.put(scriptEngineFactory.getLanguageName(),

scriptEngineFactory);

ListmimeList=scriptEngineFactory.getMimeTypes();for(String string2 : mimeList) {

scriptMap.put(string2, scriptEngineFactory);

}

}

}

}staticpublicScriptEngine initEngineByScript(Scanner reader) {

createMaps();

ScriptEngine engine=null;

String firstLine=reader.nextLine();if(firstLine!=null) {

Setkeys=scriptMap.keySet();for(String string : keys) {if(firstLine.indexOf(string)!=-1) {

engine=scriptMap.get(string).getScriptEngine();break;

}

}

}returnengine;

}staticpublicScriptEngine initEngineByFileName(String scriptFileName) {

ScriptEngine engine=null;intindex=scriptFileName.lastIndexOf('.');if(index!=-1) {

String ext=scriptFileName.substring(index+1, scriptFileName

.length());

ScriptEngineManager manager=newScriptEngineManager();

engine=manager.getEngineByExtension(ext);

}returnengine;

}staticpublicScriptEngine initEngine(String scriptFileName) {

ScriptEngine engine=null;

Scanner scanner=null;try{

scanner=newScanner(newInputStreamReader(newFileInputStream(

scriptFileName)));

engine=initEngineByScript(scanner);if(engine==null)

engine=initEngineByFileName(scriptFileName);

}catch(FileNotFoundException e) {

e.printStackTrace();

}finally{if(scanner!=null)

scanner.close();

}returnengine;

}privatevoidinit(String scriptFileName) {

engine=initEngine(scriptFileName);

Reader reader=null;try{

reader=newInputStreamReader(newFileInputStream(scriptFileName));

engine.eval(reader);

}catch(FileNotFoundException e) {

System.err.printf("Script file %s can't find!\n", scriptFileName);

e.printStackTrace();

System.exit(-1);

}catch(ScriptException e) {

System.err.printf("Run script file %s error!\n", scriptFileName);

e.printStackTrace();

}finally{if(reader!=null)try{

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}publicjsr223(File scriptFile) {

String name=scriptFile.getName();

init(name);

}publicjsr223(String scriptFileName) {

init(scriptFileName);

}staticpublicvoidShowAllAvilableScript() {

ScriptEngineManager manager=newScriptEngineManager();

Listlist=manager.getEngineFactories();for(ScriptEngineFactory scriptEngineFactory : list) {

System.out.printf("EngineName:%s LanguageName:%s Extensions:%s Mime:%s\n",

scriptEngineFactory.getEngineName(), scriptEngineFactory

.getLanguageName(), scriptEngineFactory

.getExtensions(), scriptEngineFactory

.getMimeTypes());

}

}publicvoidcallStart()throwsScriptException, NoSuchMethodException {

Invocable invocableEngine=(Invocable) engine;

invocableEngine.invokeFunction("Start","hello world 世界你好\n");

}publicvoidcallStop()throwsScriptException, NoSuchMethodException {

Invocable invocableEngine=(Invocable) engine;

invocableEngine.invokeFunction("Stop","GoodBye 再见\n");

}/***@paramargs

*@throwsScriptException

*@throwsNoSuchMethodException*/publicstaticvoidmain(String[] args)throwsScriptException,

NoSuchMethodException {//TODO Auto-generated method stub//ShowAllAvilableScript();String scriptFileName="E:\\workspace\\JSR223\\src\\test\\jsr223\\test.py";

jsr223 jsr=newjsr223(scriptFileName);

jsr.callStart();

jsr.callStop();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值