Ant脚本生成的Java Jar不支持用户输入

时间:2014-08-30 23:58:18

标签: java ant jar

Ant脚本生成的Jar不支持用户输入 类文件是

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LogClass {

public static void main(String argsp[]) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(System.in));
    System.out.println(bufferedReader.readLine());
  }

}

build.xml是

<project name="HelloWorld" basedir="." default="main">

<property name="src.dir"     value="src"/>

<property name="build.dir"   value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir"     value="${build.dir}/jar"/>

<property name="main-class"  value="LogClass"/>



<target name="clean">
    <delete dir="${build.dir}"/>
</target>

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>

<target name="jar" depends="compile">
    <mkdir dir="${jar.dir}"/>
    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
        <manifest>
            <attribute name="Main-Class" value="${main-class}"/>
        </manifest>
    </jar>
</target>

<target name="run" depends="jar">
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>

<target name="clean-build" depends="clean,jar"/>

<target name="main" depends="clean,run"/>

我正在使用带有JDK 1.8的eclipse luna最新版本。 运行构建文件jar后成功创建,但在运行jar时,在eclipse上运行时不支持用户输入。 命令提示符支持用户输入,但它不支持externat liberary。 请帮忙。 我的项目需要用户输入和外部自由。

2 个答案:

答案 0 :(得分:1)

当您从控制台运行时,您可能使用java可执行文件,并且System.in(通常代表控制台)可用,因为控制台本身显然是可用的。当您从Eclipse运行时,您可能使用javaw可执行文件,它运行仅图形模式,即没有控制台。外部库无法工作的原因是你没有在jar的类路径上。修改清单以包含它,或将正确的类路径指定为命令行参数。

答案 1 :(得分:1)

主要问题是你正在用fork="true"执行你的jar文件,这导致Ant在Ant的子进程中运行你的应用程序,因此没有控制台可用于它,标准输入也不会

我看到了两种可能的解决方法:使用fork="false"运行应用程序jar或使用GUI对话框获取输入,例如使用JOptionPane,而不是从System.in获取输入。