2013-06-05 40 views
1

我用java類(Invoke)創建了一個java庫(名爲:invoke)。它可以在設計器導航窗格中的代碼下展開腳本庫時看到。SSJS調用java類中的方法(在java庫中)

的代碼是:

package com.kkm.vijay; 

public class Invoke { 

    public static void main(String[] args) { 

     Runtime r = Runtime.getRuntime(); 
     Process p = r.exec("C://some.exe"); 

    } 
} 

使用下述SSJS按鈕的onclick事件顯示錯誤:500在瀏覽器預覽時。

importPackage(com.kkmsoft.vijay); 
var v=new Invoke(); 
v.main(); 

即使我使用的功能的類中,改變SSJS的最後一行到v.fn()。然而同樣的問題。

+2

啓用數據庫中的XPage標準錯誤頁面以查看真正的錯誤。 –

回答

5

有許多事情是錯誤的,因爲Fredrik提到你應該打開標準的Error頁面。

您的第一個代碼將不會運行,因爲它沒有正確捕獲異常。您還正在使用main()方法,該方法通常用於執行程序。但是你沒有任何爭辯地稱它。避免使用該方法,除非它用於執行應用程序。

所以改成這樣:

package com.kkm.vijay; 

import java.io.IOException; 

public class Invoke { 

    public void mainCode() { 

     Runtime r = Runtime.getRuntime(); 
     try { 
      Process p = r.exec("C://WINDOWS//notepad.exe"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

你應該把這些代碼在新的Java視圖設計器。

Java view of image

下一步按鈕代碼需要改變。

var v=new com.kkm.vijay.Invoke(); 
v.mainCode(); 

測試它應該工作正常。接下來的問題是,因爲它是SSJS,應用程序將在服務器上執行。這可能存在安全隱患,並且可能需要您修改java.policy文件才能執行此操作。

相關權限爲java.io.FilePermission

+1

它現在工作西蒙。但是,如果我爲java類使用默認包,該怎麼辦? ssjs代碼如何改變?另外如何以同樣的方式使用jar文件(在系統文件夾中)? – vijay

+0

您應該避免使用Java類的默認包(壞編程)。 lib/ext文件夾中的JAR應該以相同的方式訪問。對於NSF內部,請參閱以下內容。 http://stackoverflow.com/questions/14464827/are-jar-files-in-webcontent-web-inf-lib-available-to-java-design-elements-in-dom –

+1

正如西蒙所說..永遠不要使用默認包。包名稱用於組織代碼。程序包名稱爲您的代碼提供了一個上下文和一種含義。如果你把一個'文件'對象放在默認的包中。這個類的用途,使用時間以及寫入的地點並不十分清楚。如果你把它放在一個包裏,讓我們說你的.application.util。另一個開發人員知道它在那裏爲您的應用程序定製,它以某種方式用作一個util類,它是一個文件。當你以後需要這個類時,你會知道它是爲應用程序x創建的orignaly。 – jjtbsomhorst