0

私は自分のコードのいくつかに問題があり、このエラーをトラブルシューティングすることはできません。

私はInterprolog(Java + Prolog)を使用していますここを参照してください

スタックトレースは次のとおりです。

  Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at      com.declarativa.interprolog.AbstractPrologEngine.copyToTemp(AbstractPrologEngine.java)
 at com.declarativa.interprolog.AbstractPrologEngine.consultFromPackage(AbstractPrologEngine.java)
 at LoginHandler.actionPerformed(LoginHandler.java:24)
 at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
 at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
 at java.awt.Component.processMouseEvent(Unknown Source)
 at javax.swing.JComponent.processMouseEvent(Unknown Source)
 at java.awt.Component.processEvent(Unknown Source)
 at java.awt.Container.processEvent(Unknown Source)
 at java.awt.Component.dispatchEventImpl(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Window.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)

および問題のコード:

      myEngine = new NativeEngine();
  myEngine.consultFromPackage("C:\\interprolog212a\\userlist.p", LoginHandler.class);
  boolean x = myEngine.deterministicGoal("hasAccess(user,pass)");

何か案は?私はレンガの壁にぶつかっています...

ああ、24行目は私が投稿したコードの2行目です。

編集:userlist.pのコンテンツ:

hasAccess(tom,123).
hasAccess(bob,456).

以下のいくつかの提案に続いて、loginhandlerと関連するクラスを独自のパッケージに移動し、userlist.pもパッケージに移動しましたが、次のエラーが発生します。

com.declarativa.interprolog.util.IPException: Problem consulting from package         archive:C:\Users\Keval\AppData\Local\Temp\IP_5283895338735856757\userlist.p
4

2 に答える 2

2

オープンソースだと思います。これを行っています:

String className = rc.getName();    
String packageName = className.substring(0,className.lastIndexOf('.'));

rcあなたの呼び出しクラスです。だから私はあなたのLoginHandlerクラスがデフォルトのパッケージにあり、それがこのコードをつまずかせていると思いますか?パッケージに入れてみてください。つまり、パッケージpackage blah;の先頭に追加して、その名前のディレクトリに移動します。

これは、userlist.plが実際にはコードと同じ場所にあると想定し、パッケージ名を使用してコードがロードされた場所を見つけようとしているためです。consultFromPackage()おそらくファイル名のみを解析でき、本格的なパスは解析できないため、実際に使用しようとしている方法を使用できるとは思いません。

ああ、あなたはソースを得ることができます。Webサイトからリンクされているzipファイルにあります。

于 2010-02-12T15:35:57.097 に答える
0

パスの2番目\\はそれを混乱させていますか?パス内の各ディレクトリを調べるために何かをしている場合、空の文字列と混同される可能性がありますか?

于 2010-02-12T15:23:46.933 に答える