- PR -

【コマンドラインでjava内のメソッドを実行】

投稿者投稿内容
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 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));
}
}

スキルアップ/キャリアアップ(JOB@IT)