【问题标题】:SublimeText3 doesn't recognize Scanner classSublimeText3 无法识别 Scanner 类
【发布时间】:2014-07-09 11:20:51
【问题描述】:

我正在使用自定义构建系统来编译和运行 java 程序。

构建系统:

{
     "cmd": ["C:\\Program Files (x86)\\Java\\jdk1.8.0\\bin\\javac", "$file"],
     "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
     "selector": "source.java",
     "variants":
     [
     {
          "name": "Run",
          "cmd": ["C:\\Program Files (x86)\\Java\\jdk1.8.0\\bin\\java.exe", "$file_base_name"]
     }
     ]
}

只要我从不要求输入,它就可以完美运行。这是我使用这个简单程序时遇到的错误:

程序:

import java.util.Scanner;

public class Test
{
    public static void main(String [] args)
    {
        Scanner leopard = new Scanner(System.in);

        int a = leopard.nextInt();
        System.out.println(a);
    }
}

错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Test.main(Test.java:9)
[Finished in 1.3s with exit code 1]
[cmd: ['C:\\Program Files (x86)\\Java\\jdk1.8.0\\bin\\java.exe', 'Test']]
[dir: C:\Users\yayu\Desktop]
[path: C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Java\jdk1.8.0\bin]

我的问题是有没有办法让 Scanner 类在 SublimeText3 中工作?

【问题讨论】:

    标签: java sublimetext2 sublimetext sublimetext3


    【解决方案1】:

    不,没有。与documented here extensively 一样,Sublime 不支持直接在编辑器中运行程序时的输入(例如使用您拥有的构建系统)。但是,在 Windows 上有一个解决方法:首先通过 cmd.exe 的实例运行您的程序。

    {
         "cmd": ["javac", "$file"],
         "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
         "selector": "source.java",
         "shell": true,
    
         "variants":
         [
         {
              "name": "Run",
              "cmd": ["start", "cmd", "/k", "java", "$file_base_name"],
              "shell": true
         }
         ]
    }
    

    /k 选项在您的程序完成运行后保持窗口打开,因此您可以检查输出、错误等。如果您希望它立即关闭,只需使用 /c 代替。根据错误消息,我删除了javacjava 可执行文件的完整路径,因为它已经在您的PATH 中。它使构建系统更简洁,更易于理解。

    【讨论】:

    • 我在尝试运行时收到此错误:“[WinError 2] 系统找不到指定的文件”。
    • @yayu 你试过删除.class 文件,重新编译,然后再次运行吗?我对 Java 的了解有些有限,所以我不太确定还有什么建议。您可能还想尝试将.exe 添加回javacjava 命令,看看是否是问题所在。
    • 我确实尝试删除 .class 文件并重新编译。我也添加了.exe,但我仍然得到同样的错误。如果你想到别的,请告诉我。在此期间,我会继续摆弄它。感谢您的帮助!
    • @yayu - 好的,还有一件事 - 见我上面的编辑。我在构建和运行命令中都添加了"shell": true。希望这会有所作为!
    • "shell": true 表示"cmd"定义的命令在Windows下是通过shell-cmd.exe执行的。 start 不是外部程序,而是cmd.exe 的内部命令。因此,需要设置"shell": true 才能使start 命令起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多