- - PR -
【コマンドラインでjava内のメソッドを実行】
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-12-12 18:49
Java SE6をインストールしてjrunscriptを動かせばわかると思いますが、1行づつコマンドラインを入力して実行していくツールです。
jrunscriptではプログラムから呼び出すのは難しいでしょうから、サンプルを載せておきます(JavaSE6が必要)。起動すると入力モードになるので script>fr=new javax.swing.JFrame(); script>d = new JDialog(fr, "test"); script>d.show(); でダイアログが表示されます。Sampleでは1つだけ機能を追加して script>method d でdのメソッドを表示します。 自作ツールではコマンド解析してmethodを直接invokeしているのでデバッグ機能などいろいろつけてます。 --------------- import java.util.*; import java.io.*; import java.lang.reflect.*; import javax.script.*; /** * sample */ public class Sample { private ScriptEngine m_engine; /** * constructor. */ private Sample() throws IOException { String engineName = "js"; m_engine = new ScriptEngineManager().getEngineByName(engineName); m_engine.put("engine", m_engine); } /** * main. */ public static void main(String[] args) { try { Sample obj = new Sample(); obj.run(); } catch (Throwable e) { e.printStackTrace(); System.exit(-1); } System.exit(0); } /** * */ public void run() throws Exception { System.out.println("script sample start"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("script>"); String line = reader.readLine(); if (line.equals("exit")) return; // method command : a gift function. if (line.startsWith("method ")) { String name = line.substring(7).trim(); Object obj = m_engine.get(name); Class cls = null; if (obj!=null) cls = obj.getClass(); else { try { cls = Class.forName(name); } catch (Exception e) { e.printStackTrace(); } } if (cls!=null) { Method[] methods = cls.getMethods(); for (int i=0;i<methods.length;i++) { String methodname = methods[i].getName(); System.out.print("<" + i + "> " + methodname + "("); Class[] cs = methods[i].getParameterTypes(); for (int j=0;j<cs.length;j++) { if (j!=0) System.out.print(","); System.out.print(cs[j].getName()); } System.out.println(")"); } } continue; } try { evaluate(line); } catch (Exception e) { e.printStackTrace(); } } } /** * script. */ private final Object evaluate(String input) throws Exception { return(m_engine.eval(input)); } } |