# Java und Batch Command



## gigi99 (1. Jun 2008)

Hallo,
habe folgendes Problem und wäre überglücklich, wenn jemand Hilfe hätte:
------------

Derzeit gehe ich so vor (funktoniert)

Ich starte folgendes batch (z. B. um den Klassenpfad zu setzen):
*startcmd.bat*

```
REM  This file is part of the DITA Open Toolkit project hosted on 
REM  Sourceforge.net. See the accompanying license.txt file for 
REM  applicable licenses.
REM  (c) Copyright IBM Corp. 2006 All Rights Reserved.

REM Get the absolute path of DITAOT's home directory
set DITA_DIR=%~dp0

REM Set environment variables
set ANT_OPTS=-Xmx512m %ANT_OPTS%
set ANT_HOME=%DITA_DIR%tools\ant
set PATH=%DITA_DIR%tools\ant\bin;%PATH%
set CLASSPATH=%DITA_DIR%lib;%DITA_DIR%lib\dost.jar;%DITA_DIR%lib\resolver.jar;%DITA_DIR%lib\fop.jar;%DITA_DIR%lib\avalon-framework-cvs-20020806.jar;%DITA_DIR%lib\batik.jar;%DITA_DIR%lib\xalan.jar;%DITA_DIR%lib\xercesImpl.jar;%DITA_DIR%lib\xml-apis.jar;%DITA_DIR%lib\icu4j.jar;%CLASSPATH%
start "DITA-OT" cmd.exe
```

Im sich öffnenden "DOS-Fenster" gebe ich folgenden Befehl ein:
*java -jar lib/dost.jar /i:E:/DitaEx/syntext/cool-colors.xml /transtypedf*
(Einstellungen vom Batch sind hierfür erforderlich)

Nun passiert was ich will (aus der XML wird ein PDF erzeugt).

Nun will ich dasselbe aber aus einer Klasse heraus lösen (funktioniert nicht): 


```
public class ConversionFromJavaTest {


	  public static void main( String[] args ) throws IOException 
	  { 
	    String[] commands = {"cmd",  "E:/DITA/startcmd.bat", "java -jar lib/dost.jar /i:E:/DitaEx/syntext/cool-colors.xml /transtype:pdf"};
	    ProcessBuilder builder = new ProcessBuilder( commands ); 

	    Process p = builder.start(); 
	 
	    Scanner s = new Scanner( p.getInputStream() ).useDelimiter( "\\Z" ); 
	    System.out.println( s.next() ); 
	  }
}
```

Dies liefert folgenden Fehler:
_Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:838)
	at java.util.Scanner.next(Scanner.java:1347)
	at ant.AntTest.main(ConversionFromJavaTest .java:20)_

Es wird auch kein PDF aus der XML erzeugt.


Die Frage, etwas allgemeiner ausgedrückt:
Wie führe ich aus einer Java-Klasse erst ein batch aus (um z. B. den Klassenpfad zu setzen) und starte danach  ein jar (java -jar ...), das die "Einstellungen" des Batches benutzt/benötigt???
Alternativ könnte man vielleicht auch auf das Batch verzichten und die Arbeit des batches in der Klasse erledigen?! Habe hier aber auch keinen Ansatz gefunden.


-------
1000 Dank im Voraus!


----------



## FArt (2. Jun 2008)

Die Frage dürfte hier erst vor kurzem geklärt worden sein:
http://www.java-forum.org/de/topic70114_problem-beim-ausf-hren-batchdateien.html

Kurzum: ruf nicht die Batch auf, sondern den Commandprozessor mit der Batch als Argument.

Frage: musst du die API unbedingt in einem eigenen Prozess aufrufen? Du kannst ja auch die main[] Methode der Hauptklasse direkt aufrufen...


----------

