以下是 build.xml 的一部分:
<target name="run">
<java jar="${jar.dir}/${Main.class}.jar"
fork="yes"
<assertions>
<enable />
</assertions>
</java>
</target>
或
<target name="run">
<java classname="${Main.class}" classpath="${classes.dir};${lib.dir}" fork="yes"/>
</target>
以下是 java代码:
的示例public class Test {
public Test() {
System.out.print("Test2");
}
public static void main(String[] args) {
System.out.println("Test1");
new Test();
while(true) {}
}
}
如果我从命令行运行此代码,我有“Test1”,然后是“Test2”。 如果我使用Ant运行此代码,我只有“Test1”。
我该如何解决这个问题?
答案 0 :(得分:4)
您可能会发现Ant在打印到stdout之前将输出缓冲到程序的System.out
,并且因为您的程序永远不会终止(while (true) {}
),Ant正在等待程序在冲洗线的输出之前完成。尝试更改Test
构造函数以使用println
,您将看到输出。
答案 1 :(得分:1)
这应该可以解决问题。
System.out.flush();
在进入无限循环之前添加它。 (编辑:)和你打电话给新的测试()