2012-04-01 34 views
4

Ich starte ein interaktives Programm mit ant. Aber wenn nicht das Programm für die Eingabe fragt, geht der Cursor immer in der nächsten Zeile:Wie liest man die Eingabe über ant, ohne dass es zur nächsten Zeile geht?

Enter input: 
_ 

Aber es sollte sein:

Enter input: _ 

Passiert jeder wissen, wie dieses Problem beheben?

Hier ist die Java-Klasse

public class MyClass 
{ 
    public static void main (String args[]) 
    { 
      System.out.print ("Enter input: "); 
      //..... 
    } 
} 

Hier

<target name ="run" depends="build"> 
       <property name="name" value="MyClass"/> 
       <java fork="yes" classname="${name}" failonerror="true"> 
         <classpath refid="project.classpath"/> 
       </java> 
</target> 

Dank Teil des build.xml ist

+2

Können Sie den relevanten Teil des Ameisenskripts posten? – Andrejs

+0

Ok, ich habe gerade weitere Details hinzugefügt. – user113454

+0

Ein paar Informationen über die Quelle des Problems: [link] (http://codefeed.com/blog/ants-io-system). Vielleicht wird es einfacher sein, eine Konsolen-App zu schreiben, die manchmal ant nennt (wenn Sie eine solche Kontrolle der Konsole wirklich brauchen). –

Antwort

0

Wenn Sie zur Eingabe fragen, das heißt:

System.out.println("Enter input: "); 
in.read(); // inputs here 

Anstatt einen neuen l zu drucken ine, tun nur drucken (ohne die neue Zeile Zeichen), jetzt bei der Eingabe erhalten, ist es auf der gleichen Linie sein sollte, das heißt:

System.out.print("Enter input: "); 
in.read(); // inputs here 
+0

Nein, ich habe 'System.out.print()' NOT 'System.out.println()' verwendet. In der Tat, wenn ich die Klasse direkt mit 'Java MyClass' starte, wird der Cursor nicht in die nächste Zeile verschoben. Aber wenn ich es mit Ameisen baue und betreibe, passiert das – user113454

3
import java.io.Console; 

....

Console console = System.console();  
String input = 
    console.readLine("Enter Input: "); 

Console ist eine nette Utility-Klasse in Java 6

otherwice - Scanner

import java.util.Scanner; 

Scanner scanner = new Scanner(System.in); 
System.out.print("Enter input: "); 
String input = scanner.nextLine(); 
2

Ich erwarte, dass es mit dem fork = "ja" zu tun hat. Wenn Sie eine andere VM forkieren, schreiben zwei VMs an dasselbe Terminal. Der Zeilenumbruch wird offensichtlich vom laufenden Ant-Prozessor und nicht von Ihrer benutzerdefinierten Aufgabe ausgeführt.

Versuchen Sie es ohne Gabelung. Wenn Ihre Aufgabe interaktiv ist, möchten Sie wahrscheinlich sowieso nicht verzweigen.