无法在 SciTE 中执行 Java 代码
Unable to execute Java code in 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 不工作?
尝试在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) {}
}
}
}
我无意冒犯,但是使用中建议的hasNext()并不能解决这个问题,它只会让OP处理好它。我不认为那是 he/she 正在寻找的东西。
现在我无论如何都不是专家,出于某种原因你的程序代码在我的机器上工作......但是无论如何,当你的程序循环结束时抛出 NoSuchElementException一个可迭代的对象,没有什么可以循环的了,尽管你的程序在那里期待一些东西。在 Scanner.next() 的 Java-docs 中快速查找
表明如果没有更多的令牌可供读取,则会抛出此异常。
现在,如果我不得不猜测,我会建议您尝试使用 Scanner.next()
以外的东西,看看是否可行。
它在我的机器上运行但在你的机器上运行不正常这一事实有点令人惊讶,所以你能提供一些关于你如何尝试 运行 你的程序的信息吗?您是从默认命令行 运行 设置它吗?还是在 Site 中? (如果是第二种,我真的帮不了你,我连Scite都没接触过)
在 Linux/Unix 上,SciTE 中似乎有一个 bug/improper 处理标准输入的实现。
错误的描述和解决方法在这个 PDF 文档中:A Problem with SciTE Go Command on Linux
注意:这不是官方文档,但似乎符合您的问题。
根据该文档,当在 SciTE 上通过 "Go" 命令 运行 一个 Java 程序时,输入应该来自输出窗格。但是,在 Linux 上,这无法正常工作,就好像您正在从空流中读取一样。
当您从空流中读取时,Scanner
在尝试使用 next()
、nextInt()
等读取值时会看到文件结束标记。它抛出 NoSuchElementException
因为流中没有输入元素。
解决此问题的选项:
- 尝试上述文档中提到的方法,在 Linux 终端而不是输出窗格中使用 "Go"。
- 运行 终端中的程序并完全避免 "Go" 命令。
- 使用另一个 IDE 没有这个问题。
我写了示例代码:
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 不工作?
尝试在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) {}
}
}
}
我无意冒犯,但是使用
现在我无论如何都不是专家,出于某种原因你的程序代码在我的机器上工作......但是无论如何,当你的程序循环结束时抛出 NoSuchElementException一个可迭代的对象,没有什么可以循环的了,尽管你的程序在那里期待一些东西。在 Scanner.next() 的 Java-docs 中快速查找 表明如果没有更多的令牌可供读取,则会抛出此异常。
现在,如果我不得不猜测,我会建议您尝试使用 Scanner.next()
以外的东西,看看是否可行。
它在我的机器上运行但在你的机器上运行不正常这一事实有点令人惊讶,所以你能提供一些关于你如何尝试 运行 你的程序的信息吗?您是从默认命令行 运行 设置它吗?还是在 Site 中? (如果是第二种,我真的帮不了你,我连Scite都没接触过)
在 Linux/Unix 上,SciTE 中似乎有一个 bug/improper 处理标准输入的实现。
错误的描述和解决方法在这个 PDF 文档中:A Problem with SciTE Go Command on Linux
注意:这不是官方文档,但似乎符合您的问题。
根据该文档,当在 SciTE 上通过 "Go" 命令 运行 一个 Java 程序时,输入应该来自输出窗格。但是,在 Linux 上,这无法正常工作,就好像您正在从空流中读取一样。
当您从空流中读取时,Scanner
在尝试使用 next()
、nextInt()
等读取值时会看到文件结束标记。它抛出 NoSuchElementException
因为流中没有输入元素。
解决此问题的选项:
- 尝试上述文档中提到的方法,在 Linux 终端而不是输出窗格中使用 "Go"。
- 运行 终端中的程序并完全避免 "Go" 命令。
- 使用另一个 IDE 没有这个问题。