无法在SciTE中执行Java代码

时间:2016-02-20 10:09:48

标签: java scite

我写了一个示例代码:

import java.util.Scanner;

 public class abcd {
    public static void main(String[] args) {
        System.out.print("please enter a: ");
        Scanner a = new Scanner(System.in);
        String b = a.next();
        System.out.println(b);
    }
}

我可以通过Ubuntu终端编译和执行此代码。在SciTe中,它编译得很好,但是当我运行它时,我遇到了这个错误:

please enter a: Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at abcd.main(abcd.java:8)

任何建议?

编辑:当我在终端执行文件时,我会这样做:'java abcd'Scite:'java -cp .abcd'。这两个命令有何不同,为什么java -cp不工作?

3 个答案:

答案 0 :(得分:1)

在Linux / Unix上的SciTE处理标准输入似乎存在错误/不正确的实现。

该PDF文档中提供了错误的描述和解决方法:A Problem with SciTE Go Command on Linux

注意:这不是官方文档,但似乎与您的问题相符。

根据该文档,当通过" Go"运行Java程序时在SciTE上的命令,输入应该来自输出窗格。但是,在Linux上,这不能正常工作,就好像你是从空流中读取一样。

当您从空流中读取时,Scanner会在尝试使用next()nextInt()等读取值时看到文件结束标记。然后它会抛出一个NoSuchElementException因为流中没有输入元素。

您可以选择解决此问题:

  • 尝试上述文件中提到的方法,使用" Go"在Linux终端而不是输出窗格中。
  • 在终端中运行该程序并使用" Go"完全命令。
  • 使用不存在此问题的其他IDE。

答案 1 :(得分:0)

尝试在next();

之前使用hasNext()
import java.util.Scanner;
public class abcd {
  public static void main(String[] args) {
    System.out.print("please enter a: ");
    Scanner a = new Scanner(System.in);
    while(a.hasNext()) {
      try {
        String b = a.next();
        System.out.println(b);
      } catch (NoSuchElementException e) {}
    }
  }
}

答案 2 :(得分:0)

我不是故意冒犯,但如Alexander's answer中建议的那样使用hasNext()将无法解决此问题,它只会使OP能够很好地处理它。我认为这不是他/她正在寻找的东西。

现在我无论如何都不是专家,并且出于某种原因你的程序代码在我的机器上工作......但是当程序在可迭代对象上循环时,会抛出 NoSuchElementException 尽管你的计划期待那里的东西,但没有什么比这更好的了。快速查看Scanner.next()的Java文档 显示如果没有可用于读取的标记,则抛出此异常。

现在,如果我不得不猜测我会建议您尝试使用Scanner.next()之外的其他内容,看看是否有效。

它在我的机器上工作但不在你的机器上工作这一事实有点令人惊讶,那么你能提供一些关于你如何尝试运行程序的信息吗?您是否从默认命令行运行它?或者在Scite中? (如果是第二种情况,我真的无法帮助你,我从未触及过Scite)。