LS2J を使用している間に問題が発生した場合、LotusScript® はエラーメッセージを返します。ただし、これらのエラーメッセージは、正確な追加情報がないと誤解される場合があります。
Java™ のエラーモデルはキャッチアンドスローです。LotusScript のエラーモデルは、ON ERROR ステートメントとエラー処理ブロックです。LotusScript は Java エラーをキャッチすると、これをエラー処理モデルにマッピングします。これで、LotusScript のユーザーは、JavaError クラスを使用して LotusScript のエラーセマンティクスで Java エラーが操作できるようになります。
ユーザーには、JavaError プロパティの前に LotusScript エラーが表示されるはずです。Java が呼び出される前に LotusScript 内でエラーが検出された場合は、JavaError.ErrorMsg と JavaError.StackTrace は空の文字列です。次のコードに注意してください。
Uselsx *javacon
Sub Initialize
Dim jSession As JavaSession
Dim cls As JavaClass
Dim obj As JavaObject
Dim msg As String
Dim jError As JavaError
On Error Goto ErrorHandling
Set jSession = New JavaSession()
Set cls = jSession.GetClass("java/lang/Short")
' This signature would not match any Constructor
Set obj = cls.CreateObject("(X)V", 1)
Print obj.toString()
Exit Sub
ErrorHandling:
Print Error ' "LS2J Error: Constructor failed to execute"
Set jError = jSession.getLastJavaError
Print "Java error: " jError.ErrorMsg ' empty String
Exit Sub
End Sub
ユーザーが java.lang.Short 型コンストラクタを呼び出そうとしたとします。この場合、正しい呼び出しは、次の Short 型パラメータの署名です。
Set obj = cls.CreateObject("(S)V", 1)
ところがその代わりにユーザーが次のように呼び出したとします。
Set obj = cls.CreateObject("(X)V", 1)
「X」はどちらの Java タイプとも一致しないため、Java が呼び出される前に LotusScript からエラーが発生します。次のエラーメッセージだけが、LotusScript エラーに表示されます。
LS2J Error: Constructor failed to execute
LS2J の LotusScript 部分がエラーを検出できなければ、Java が呼び出されます。また、次のコードで呼び出されたとします。
Set obj = cls.CreateObject("(I)V", 1)
この署名は、int 型のパラメータのコンストラクタと一致しています。LotusScript ではエラーが検出されないので Java コンストラクタを呼び出そうとしますが、java.lang.Short クラスに int 型パラメータを持つコンストラクタがないために呼び出しは失敗します。LotusScript エラーはまだ次のままです。
LS2J Error: Constructor failed to execute
しかし Java が呼び出されているため、次の jError.ErrorMsg も表示されます。
java.lang.NoSuchMethodError: <init>
JavaError オブジェクトが JavaSession から取り出されるときには、最後のエラーと最後の StackTrace が含まれています。
Example code using JavaError
Sub Initialize
Dim mySession As New JavaSession
Dim myError As JavaError
On Error GoTo ErrorHandling
'...
' code here
'....
Exit Sub
ErrorHandling:
Set myError = mySession.getLastJavaError
print Error
print myError.ErrorMsg
print myError.StackTrace
End Sub
このコードサンプルで、LotusScript エラー、Java エラー、Java StackTrace が出力されます。
例 1:
オブジェクトのインスタンスを作成しようとしたときに、署名または引数の番号が間違っていたとします。
LotusScript のメッセージ: |
LS2J: Null JavaObject |
---|---|
Java ErrorMsg のメッセージ: |
java.lang.NoSuchMethodError: <init> |
例 2:
オブジェクトのインスタンスを作成しようとしたときに、Constructor でエラーが発生したとします。
LotusScript のメッセージ: |
LS2J: Null JavaObject |
---|---|
Java StackTrace のメッセージ: |
java.lang.ArrayIndexOutOfBoundsException at myGraph.<init>(コンパイル済みコード) |
例 3a:
メソッドを実行しようとしたときに、使用した引数の番号が間違っていたとします。
LotusScript のメッセージ: |
LS2J: Parameter mismatch calling Method <Method Name here> |
---|---|
Java ErrorMsg のメッセージ: |
LS2J エラー |
例 3b:
メソッドを正しい引数で実行したときに、メソッドに間違いがあったとします。
LotusScript のメッセージ: |
LS2J: Parameter mismatch calling Method <Method Name here> |
---|---|
Java StackTrace のメッセージ: |
java.lang.ArrayIndexOutOfBoundsException: 3 at myGraph.setOrientation(myGraph.java:262) |