首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java help - StringIndexOutOfBoundsException -字符串索引超出范围:-1

Java help - StringIndexOutOfBoundsException -字符串索引超出范围:-1
EN

Stack Overflow用户
提问于 2010-02-12 23:01:38
回答 2查看 2.2K关注 0票数 0

我的一些代码有问题,我真的不能解决这个错误。

我正在使用Interprolog(Java+Prolog),请参阅here

下面是堆栈跟踪:

代码语言:javascript
复制
  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)

和有问题的代码:

代码语言:javascript
复制
      myEngine = new NativeEngine();
  myEngine.consultFromPackage("C:\\interprolog212a\\userlist.p", LoginHandler.class);
  boolean x = myEngine.deterministicGoal("hasAccess(user,pass)");

有什么想法吗?我撞到了一堵砖墙。

24行是我发布的第二行代码。

编辑:userlist.p的内容:

代码语言:javascript
复制
hasAccess(tom,123).
hasAccess(bob,456).

根据下面的一些建议,我将loginhandler和相关类移到了它们自己的包中,也将userlist.p移到了包中,现在我得到了这个错误:

代码语言:javascript
复制
com.declarativa.interprolog.util.IPException: Problem consulting from package         archive:C:\Users\Keval\AppData\Local\Temp\IP_5283895338735856757\userlist.p
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-12 23:35:57

我想是开放源码的耶。它是这样做的:

代码语言:javascript
复制
String className = rc.getName();    
String packageName = className.substring(0,className.lastIndexOf('.'));

rc是您的调用类。所以我认为您的LoginHandler类在默认包中,这会导致代码出错吗?尝试将其放入包中,即在其顶部添加package blah;,并将其移动到具有该名称的目录中。

它之所以这样做,是因为它假设userlist.pl实际上与您的代码位于相同的位置,并且它试图使用包名来查找加载代码的位置。我不认为你可以像现在这样使用consultFromPackage(),因为它只能解析文件名,而不能解析完整的路径。

哦,你可以找到源码。它在从the website链接的zip file中。

票数 2
EN

Stack Overflow用户

发布于 2010-02-12 23:23:47

路径中的第二个\\会混淆它吗?如果它做了什么来检查路径中的每个目录,它可能会被一个空字符串搞混,也许吧?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2252657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档