隨筆 - 67  文章 - 79  trackbacks - 0
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          一個小示例
          需要 jython-engine.jar jython.jar
          java 文件
          package test.jsr223;

          import java.io.*;
          import java.util.*;
          import javax.script.*;


          public class jsr223 {

              
          private ScriptEngine engine;
              
          static private Map<String, ScriptEngineFactory> scriptMap = null;

              
          static private void createMaps() {
              
          if (scriptMap == null) {
                  scriptMap 
          = new HashMap<String, ScriptEngineFactory>();
                  ScriptEngineManager manager 
          = new ScriptEngineManager();
                  List
          <ScriptEngineFactory> list = manager.getEngineFactories();
                  
          for (ScriptEngineFactory scriptEngineFactory : list) {
                  scriptMap.put(scriptEngineFactory.getEngineName(),
                      scriptEngineFactory);
                  scriptMap.put(scriptEngineFactory.getLanguageName(),
                      scriptEngineFactory);
                  List
          <String> mimeList = scriptEngineFactory.getMimeTypes();
                  
          for (String string2 : mimeList) {
                      scriptMap.put(string2, scriptEngineFactory);
                  }
                  }
              }
              }

              
          static public ScriptEngine initEngineByScript(Scanner reader) {
              createMaps();
              ScriptEngine engine 
          = null;
              String firstLine 
          = reader.nextLine();
              
          if (firstLine != null) {
                  Set
          <String> keys = scriptMap.keySet();
                  
          for (String string : keys) {
                  
          if (firstLine.indexOf(string) != -1) {
                      engine 
          = scriptMap.get(string).getScriptEngine();
                      
          break;
                  }
                  }
              }
              
          return engine;
              }

              
          static public ScriptEngine initEngineByFileName(String scriptFileName) {
              ScriptEngine engine 
          = null;
              
          int index = scriptFileName.lastIndexOf('.');
              
          if (index != -1) {
                  String ext 
          = scriptFileName.substring(index + 1, scriptFileName
                      .length());
                  ScriptEngineManager manager 
          = new ScriptEngineManager();
                  engine 
          = manager.getEngineByExtension(ext);
              }
              
          return engine;
              }

              
          static public ScriptEngine initEngine(String scriptFileName) {
              ScriptEngine engine 
          = null;
              Scanner scanner 
          = null;
              
          try {
                  scanner 
          = new Scanner(new InputStreamReader(new FileInputStream(
                      scriptFileName)));
                  engine 
          = initEngineByScript(scanner);

                  
          if (engine == null)
                  engine 
          = initEngineByFileName(scriptFileName);
              } 
          catch (FileNotFoundException e) {
                  e.printStackTrace();
              } 
          finally {
                  
          if (scanner != null)
                  scanner.close();
              }

              
          return engine;
              }

              
          private void init(String scriptFileName) {

              engine 
          = initEngine(scriptFileName);
              Reader reader 
          = null;
              
          try {
                  reader 
          = new InputStreamReader(new FileInputStream(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();
                  }
              }
              }

              
          public jsr223(File scriptFile) {
              String name 
          = scriptFile.getName();
              init(name);
              }

              
          public jsr223(String scriptFileName) {
              init(scriptFileName);
              }

              
          static public void ShowAllAvilableScript() {
              ScriptEngineManager manager 
          = new ScriptEngineManager();
              List
          <ScriptEngineFactory> list = 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());

              }
              }

              
          public void callStart() throws ScriptException, NoSuchMethodException {
              Invocable invocableEngine 
          = (Invocable) engine;
              invocableEngine.invokeFunction(
          "Start""hello world 世界你好\n");
              }

              
          public void callStop() throws ScriptException, NoSuchMethodException {
              Invocable invocableEngine 
          = (Invocable) engine;
              invocableEngine.invokeFunction(
          "Stop""GoodBye 再見\n");
              }

              
          /**
               * 
          @param args
               * 
          @throws ScriptException
               * 
          @throws NoSuchMethodException
               
          */
              
          public static void main(String[] args) throws ScriptException,
                  NoSuchMethodException {
              
          // TODO Auto-generated method stub
              
          //ShowAllAvilableScript();
              String scriptFileName = "E:\\workspace\\JSR223\\src\\test\\jsr223\\test.py";
              jsr223 jsr 
          = new jsr223(scriptFileName);

              jsr.callStart();
              jsr.callStop();

              }

          }
          jython 文件
          jython的本地化太....了。在py中用ToJavaString,ToPyString函數(shù)
          #/usr/bin/env python
          #
          coding=gbk
          import sys
          def GetLocalEncoding():
              
          '''Get local system encoding 
              return None when fail.
              
          '''
              
          import java.lang.System as JSystem
              propertys
          =["sun.jnu.encoding","file.encoding"]
              Encoding
          =None;
              
          for property in propertys:
                  Encoding
          =JSystem.getProperty(property)
                  
          if Encoding != None:
                      
          break
              
          return Encoding
              
          def ToJavaString( astr,localEncoding=GetLocalEncoding()):
             
              
          import java.lang.String as JString
              
              
          if localEncoding == None:
                  
          raise EnvironmentError("Can't get local encoding!\n")
              tmpstr 
          = JString(astr)
              rtnstr 
          = JString (tmpstr.getBytes("ISO8859_1"), localEncoding)
              
          if tmpstr.length() != rtnstr.length():
                  
          return rtnstr
              
          else:
                  
          return astr
            
          def ToPyString(astr):
              
          import java.lang.String as JString
              
          import org.python.core.PyString as PyString
              tmpstr 
          = JString(astr)
              rtnstr 
          = JString(tmpstr.getBytes(), "ISO8859_1")
              
          return PyString(rtnstr)

          def Start(*args):
              
          print sys.path
              
          for i in args:
                 t
          =ToPyString(i)
                 
          print t
                 
          def Stop(*args):
              
          for i in args:
                 t
          =ToPyString(i)
                 
          print t

          if __name__=='__main__':
              
          print 'hello'


          posted on 2008-02-14 14:28 zarra 閱讀(1116) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 西城区| 苏尼特左旗| 比如县| 柳江县| 平舆县| 西宁市| 崇仁县| 盈江县| 依兰县| 定南县| 广丰县| 临澧县| 兰考县| 弋阳县| 永安市| 姜堰市| 奉贤区| 固镇县| 延寿县| 沭阳县| 宽甸| 图木舒克市| 周至县| 揭东县| 上饶市| 五原县| 施秉县| 庐江县| 且末县| 来安县| 张家川| 沙洋县| 昌吉市| 六安市| 开阳县| 喀什市| 九台市| 台州市| 南充市| 田林县| 南木林县|