2014-02-22 46 views
1

好了,所以我有一些簡單的代碼我想使用的BeanShell解釋器運行,而我試圖找出我怎麼會做這樣的事情:使用BeanShell的運行Java代碼

String s = "int x = 5; System.out.println(x);" 
Interpreter i = new Interpreter(); 
i.eval(s); //THIS 

現在真正的問題出現了,我怎樣才能將「deceval(s)」的輸出轉換回字符串,以便我可以在其他地方使用輸出?

我很抱歉,如果這已被問及或是否有簡單的文檔。我找不到任何有幫助的東西。

非常感謝。

回答

0

根據文檔,eval方法返回一個Object,其中包含評估結果。嘗試將其轉換爲字符串。

+0

它爲我返回null。嘗試, 「Object obj =(String)i.eval(String);」 「Object obj = i.eval(String);」 「String obj =(String)i.eval(String)」 全部3返回null –

+0

進入調試狀態並觀察impeval(something)而不將其轉換爲字符串。 – Tostis

+0

你太快了,我做了一個編輯。 @Tostis –

1

使用以下解決方案解決。

Interpreter i = new Interpreter(); // Create a new BeanShell interpreter. 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    PrintStream ps = new PrintStream(baos); 
    PrintStream stdout = System.out; // Save System.out 
    System.setOut(ps); // Set the out to the PrintStream 
    try{ 
     i.eval(s); 
    }catch (Exception e){ 
     return "Error"; 
    } 
    String out = baos.toString(); // Get the output 
    System.setOut(stdout); // Reset the output