【问题标题】:Unable to execute Java code in SciTE无法在 SciTE 中执行 Java 代码
【发布时间】:2016-04-15 10:20:56
【问题描述】:

我已经写了一个示例代码:

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 不起作用?

【问题讨论】:

    标签: java scite


    【解决方案1】:

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

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

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

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

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

    解决此问题的选项:

    • 尝试上述文档中提到的方法,在Linux终端中使用“Go”而不是输出窗格。
    • 在终端中运行程序并完全避免“Go”命令。
    • 使用没有此问题的其他 IDE。

    【讨论】:

      【解决方案2】:

      尝试在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) {}
          }
        }
      }
      

      【讨论】:

        【解决方案3】:

        我不是有意冒犯,但是按照Alexander's answer 的建议使用 hasNext() 并不能解决这个问题,它只会让 OP 能够很好地处理它。我认为这不是他/她想要的。

        现在我无论如何都不是专家,出于某种原因,您的程序代码可以在我的机器上运行...但是无论如何,当您的程序在可迭代对象上循环时会抛出 NoSuchElementException尽管您的程序期望在那里有一些东西,但没有什么可以循环的了。在Scanner.next() 的 Java 文档中快速查找 表明如果没有更多可读取的令牌,则会引发此异常。

        现在,如果我不得不猜测,我建议您尝试使用 Scanner.next() 以外的其他东西,看看是否可行。

        它在我的机器上运行但在你的机器上运行有点令人惊讶,所以你能提供一些关于你如何尝试运行你的程序的信息吗?您是从默认命令行运行它吗?还是在 Scite 内? (如果是第二个,我真的帮不了你,我连Scite都没碰过)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-28
          • 1970-01-01
          • 1970-01-01
          • 2018-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多