【发布时间】:2016-04-18 17:00:29
【问题描述】:
我有一个非常简单的 shell 脚本,用于编译和运行 .java 文件。
#!/bin/sh
x-terminal-emulator
javac SomeJavaFile.java
java SomeJavaFile
然而,这个脚本在触发Java 命令之前似乎停止了。本质上,脚本也可能看起来像这样
#!/bin/sh
x-terminal-emulator
我该如何解决这个问题?
编辑
根据建议和答案,我的脚本现在看起来像这样
#!/bin/sh
x-terminal-emulator -e "javac DropboxStatusLoop.java && java DropboxStatusLoop"
但是它会立即打开然后关闭。我认为这很奇怪,因为我的代码中有一个循环。
非常简单,我的代码如下所示
import java.lang.*;
public class SomeJavaFile {
public static void main(String[] args) {
for(long i = 0; ; i++) {
try {
System.out.println("Hi");
Thread.sleep(1000);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
手动完成后确实可以正常编译和运行,但是,它与之前提到的终端打开和关闭有相同的问题。我相信这是因为Thread.sleep(1000); 这可能会让终端认为它已经完成了它正在做的事情,所以它会停止并关闭。任何解决此问题的帮助表示赞赏。
【问题讨论】:
-
为什么需要
x-terminal-emulator? -
@cricket_007 我被告知在打开默认终端时使用它
-
谁告诉的?如果您只是在
chmod +x ./your-script.sh之后运行./your-script.sh,那么您的 java 代码将在当前终端中运行。没有理由创建一个新的。 -
@cricket_007 我看到了混乱。我所做的是设置它,以便在双击时运行脚本文件,所以我想做的是启动一个终端,然后编译并运行 java 程序。当前没有终端
-
我认为你需要
DropboxStatusLoop.java && java DropboxStatusLoop。您的方式会将编译任务置于后台并立即尝试运行代码而无需完成编译。