0

Windows XP で Matlab の javabuilder パッケージを使用しようとしましたが、javabuilder クラスをインスタンス化しようとすると奇妙なエラーが発生します。この問題を説明するために、MCRROOT および PATH システム変数を (正しく設定されているかどうかを確認するために) 出力し、MWCharArray を作成しようとする単純なプログラムを作成しました。

import com.mathworks.toolbox.javabuilder.*;
import com.mathworks.toolbox.javabuilder.internal.MCRConfiguration;

class Main
{
   public static void main(String[] args)
   {
       System.out.println("MCRROOT: " + System.getenv("MCRROOT"));
       System.out.println("PATH: " + System.getenv("PATH"));
       System.out.println(MCRConfiguration.isInstalledMCR());
       MWCharArray test = new MWCharArray("Test");
   }
}

プログラムを実行すると、出力は次のようになります。

MCRROOT: C:\Program files\MATLAB\MATLAB Compiler Runtime\v710
PATH: C:\Program files\CollabNet Subversion Client;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program files\MATLAB\MATLAB Compiler Runtime\v710
false
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getMCRRoot(MCRConfiguration.java:77)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ModuleDir.<clinit>(MCRConfiguration.java:51)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(MCRConfiguration.java:56)
        at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1447)
        at com.mathworks.toolbox.javabuilder.MWUtil.GetUnknownClassID(MWUtil.java:1258)
        at com.mathworks.toolbox.javabuilder.MWClassID.<clinit>(MWClassID.java:41)
        at com.mathworks.toolbox.javabuilder.MWCharArray.<init>(MWCharArray.java:75)
        at Main.main(Main.java:11)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(String.java:1937)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.get(MCRConfiguration.java:70)
        at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.<clinit>(MCRConfiguration.java:72)
        ... 8 more
Java Result: 1

まず、MCRROOT と PATH の値は正しいですか? MCRROOT を設定する方法を見つけるために Google を試しましたが、結果が矛盾しています。一部の情報源は、de version dir を含める必要があると言っていますが、他の情報源は反対のことを言っています。また、isInstalledMCRメソッドが返されるのはなぜfalseですか? MCR のインストールを再確認しました (そして、確実にアンインストールしてからインストールしました) のに、ライブラリがそれを見つけられないのはなぜですか?

助けてくれてありがとう!

編集:バージョン文字列なしで設定しようとしましMCRROOTたが、失敗しました。

4

2 に答える 2

1

ただの推測です!「mcrroot」には空白が含まれていますが、Java は文字列をいじっています。mcr のインストール パスをC:\MATLAB\MATLABCompilerRuntime\v710のようなものに変更し、空白や特殊文字を省略します。

于 2010-09-17T09:46:19.663 に答える
0

解決策を見つけたので、今後の参考のために自己回答を投稿します。プログラムのクラスパスに javabuilder.jar を追加するだけでなく、MCR のランタイム ライブラリへのパスをjava.library.pathJDK パラメータに追加する必要があります。

私の間違いは、パスを MCR インストール ディレクトリ (私の場合は ) のライブラリへのパスとして設定する代わりにC:\MATLAB\MCR\v710\runtime\win32、ランタイム ディレクトリをプロジェクトのディレクトリにコピーして代わりに使用したことです。javabuilder ライブラリはjava.library.path変数を使用しているようでMCROOT、奇妙な "StringIndexOutOfBoundsException" を説明するものです。

于 2010-09-20T14:24:37.737 に答える