写了一个java小代码,接受控制台的输入,实现输入输出的最简单简单交互。
但是实践来很久仍然没能通过SublimeText的编译系统来直接调用终端来运行这个java小程序。
代码原文如下:
import java.util.*;
public class GetPrice {
public static void main(String[] args) {
System.out.println("please input a number");
Scanner input = new Scanner(System.in);
double number1 = input.nextDouble();
System.out.println("please input a number2");
double number2 = input.nextDouble();
double price = number1 * number2;
System.out.println("The price of this product is " + price);
}
}
因为SublimeText的设计不能支持终端输入,这点很重要。
可以参见这片文章,Terminal window inside Sublime Text 2
在网上找文章看如何修改javac.sublime-build编译系统的配置文件来直接运行java,并且可以在弹出的终端中接受用户的输入。结果发现国内的文章都是转来转去,转载的都是有错误的文章。
配置是这样的
{
"shell_cmd": "javac -encoding utf-8 $file_name && java $file_base_name",
"file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
"selector": "source.java",
"encoding": "utf-8"
}
文章还信誓旦旦地标称这个sublime-build可以在新窗口中打开终端接收输入,转载者也都是拿来主义,并没有发现作者的纰漏。
问题的答案
下面是我在stackflowover上使用mac sublimetext3 java run
找到的答案:
- How to run Java using Sublime Text 3 on Mac OS
- Show Java build results in gnome-terminal with Sublime Text 3
- Sublime Text 2 build system to compile & run Java in a new Terminal/Command Prompt window?
- Terminal window inside Sublime Text 2
问题的解决方法
上面的答案比国内的转载要靠谱,仔细阅读就会发现这个问题的玄机和解决的方法。
得益于Sublime的插件机制,可以通过以下的插件来实现。
Terminal 可以设置终端的类型和参数。Glue的官网,支持通过命令面板、右键、快捷键方式唤出终端。
通过这个问题还意外找到了一个强大的运行脚本的好插件SublimeREPL,但是它对java无效,这个项目的描述是这样的
SublimeREPL - run an interpreter inside ST2 (Clojure, CoffeeScript, F#, Groovy, Haskell, Lua, MozRepl, NodeJS, Python, R, Ruby, Scala, shell or configure one yourself)
总结
使用SublimeText遇到要接受输入的java小程序只能调用终端运行,在终端中输入。那么在Sublime里可以通过插件来唤出终端。同样是问题的答案,quora上的答案就很简单,像是没有回答过一样。stackoverflow上找答案才更靠谱,更专业,更科学。
其实这个问题没有必要折腾,开发java项目还是在IDE中最靠谱,Sublime虽然被称为神器,但还是只适合一些简单的小程序和阅读代码时的应用场景。