Erste Schritte Jar-Datei erstellen -?

L

LeChat

Gast
Hallo,

Habe ein paar Sachen ausprobiert um eine Jar-Datei zu erstellen.
Das erste File funktionierte, wobei die restlichen nicht mehr.

Hatte die Anleitung aus dem Buch "Java von Kopf bis Fuss" befolgt. Es stand es gibt verschiedene Möglichkeiten um eine Jar zu erstellen, aber sie empfohlen die sicherste.

Es stand man müsse eine Verzeichnisstrutur erstellen, (classes-de-files-file.class) und (source-de-files-file.java).

-Zuerst die Java-Datei ins unterste "source" Verzeichnis legen "files".
-Auf der cli in den "source" Ordner wechseln und "javac -d ../classes/ch/JFiles ch/JFiles/File.java" ausführen.
-Eine "manifest.txt" Datei erstellen, mit "Main-Class: de.files.filename (+ enter) drücken (Zeilenumbruch).
-Auf der cli in den "classes" Ordner wechseln und "jar -cvmf manifest.txt name.jar de" ausführen.

Aber beim ausführen der Jar-Datei kommt es zu einem Fehler, bei Doppelclick Exception-Dialog" und über die cli(Kommandozeileninterpreter) gibts einen Ausnahmefehler "Exception in thread "main" java.lang.NoClassDefFoundError:"

Habe die aktuellsten Jre und Jdk versionen.

Vielleicht kennt jemand dieses Buch besser, oder kennt sich gut mit Jar-Archiv erstellen aus ?

Vielen Dank für die Hilfe

LeChat
 

Marco13

Top Contributor
Bevor jemand antwortet, der das ganze gerne per Hand durchexerziert: So eine IDE wie z.B. Eclipse bietet ein einfaches "Export as JAR" an, damit spart man sich das alles meistens... ist das eine Option?
 
L

LeChat

Gast
Mögliche Option ja. Aber habe nur ein zwei mal mit Eclipse gearbeitet, für den Anfang benutze ich immer noch einen normalen Editor.
Habe es mit der IDE probiert aber komme beim kompilieren nicht weiter, da zum in jar exportieren eine class-Datei vorhanden sein müsste.

Entschuldigt noch wegen der zusammen gewürfelten Erklärung vorhin, aber es könnte auch interessant sein zu wissen wie die jar- und javactools im Hintergrund arbeiten.

Gute Nacht
LeChat
 
T

tröööt

Gast
könntet ihr BITTE mal damit aufhören anfänger immer zu einer IDE zwingen zu wollen ? wohin das führt haben wir doch mal gesehen als ein user mit angeblich 3 jahren erfahrung fragte was ein "terminal" sei und dachte wir meinten damit den output seiner IDE ...

erlich ... anfänger sollten wirklich die ersten schritte mit nem editor und nem terminal machen ... damit sie auch verstehen was eine IDE da im hintergrund mit ihren meist doch recht dämlichen build-tools macht ...

[OT]boar erlich ... jedes mal wenn ich das lese könnte ich sowas von kotzen ... und jeder der mir jetzt kommt mit von wegen ja erhöt produktivität und bla ... ganz erlich ... mal als gegenantwort : ich arbeite seit 8 jahren OHNE IDE ... und bin damit durch aus produktiver als so manche IT-studies ... da ich kein AUTO-COMPLETE oder der gleichen brauche sondern das alles selbst recht schnell schreibe ...
auch brauch ich keine komplizierten libs ... ich mach das meiste mit der SE-API ... ergo : läuft auf allen VMs ohne das ich mich drum kümmern muss wie und wo irgendwelche libs liegen ...

bevor als der nächste beim nächsten anfänger wieder gleich losprahlt : nutz ne IDE ... sollte er sich VORHER mal überlegen was dann dieser anfänger in einigen jahren als "fortgeschrittener" für "anfängerfragen" stellen kann eben weil er diese einfachen grundlagen nie kennen gelernt hat ...

danke ... und jetzt back to topic
[/OT]
@TO
hmm ... an sich schon mal gar nicht so richtig

1) du hast einen SOURCE / SRC ordner ... in dem deine projekt-struktur liegt ... also z.b. SRC/ch/JFiles/*.java .. packages schreibt man aber klein ... also "jfiles" ... und entsprechend in deinen klassen auch
2) dann hast du einen BINARY / BIN / CLASS ordner in den deine sturktur dann landet ... hier hast du den ersten fehler ... es reicht lediglich das ziel-dir anzugen ... also so : [c]javac -d ..\BIN ch\jfiles\*.java
dadurch wird automatisch in BIN/ch/jfiles/*.class erzeugt ...
wenn man wie "-d ..\BIN\ch\jfiles" nutzen würde würde dort erst die struktur erstellt ... also : "BIN/ch/jfiles/ch/jfiles/*.class" ... und das ist ja nun mal FALSCH
3) man erzeugt in der regel KEIN eigenes manifest ... zumindest nicht wenn man NUR Main-Class angeben will ... denn dafür besitzt "jar" die option "e" mit der die zustartene klasse direkt angegeben werden kann ... erst wenn es dann noch mit Classpath und anderen attributen losgeht die man nicht via cli an "jar" übergeben kann erzeugt man ein manifest ... also würde dieser schritt bei dir rausfliegen
4) da du kein eigenes manifest nutzt und auch sonst lieber den ganzen pfad nutzen solltest würde sich dann "jar" wie folgt ändern : "jar vcef ch.jfiles.Main deinJarFile.jar ch\jfiles\*.class" wobei die reihenfolge von "e" und "f" zu beachten ist ...


@alle die jetzt mit build-tools kommen wollen

ganz erlich : ich versteh nicht was so umständlich sein soll sich ein bisschen mit den cli-tools auszukennen und seine ordner-struktur selbst entsprechend festzulegen anstatt sich mit irgendwelchen build-tools und deren scripten rumzuschlagen ...
und für alle die jetzt noch kommen mit : "und wie bindet man resourcen ein ?" die gucken dann bitte selbst in die DOC unter Java Platform Standard Edition 7 Documentation
 
L

LeChat

Gast
@TO
hmm ... an sich schon mal gar nicht so richtig

1) du hast einen SOURCE / SRC ordner ... in dem deine projekt-struktur liegt ... also z.b. SRC/ch/JFiles/*.java .. packages schreibt man aber klein ... also "jfiles" ... und entsprechend in deinen klassen auch
2) dann hast du einen BINARY / BIN / CLASS ordner in den deine sturktur dann landet ... hier hast du den ersten fehler ... es reicht lediglich das ziel-dir anzugen ... also so : [c]javac -d ..\BIN ch\jfiles\*.java
dadurch wird automatisch in BIN/ch/jfiles/*.class erzeugt ...
wenn man wie "-d ..\BIN\ch\jfiles" nutzen würde würde dort erst die struktur erstellt ... also : "BIN/ch/jfiles/ch/jfiles/*.class" ... und das ist ja nun mal FALSCH
3) man erzeugt in der regel KEIN eigenes manifest ... zumindest nicht wenn man NUR Main-Class angeben will ... denn dafür besitzt "jar" die option "e" mit der die zustartene klasse direkt angegeben werden kann ... erst wenn es dann noch mit Classpath und anderen attributen losgeht die man nicht via cli an "jar" übergeben kann erzeugt man ein manifest ... also würde dieser schritt bei dir rausfliegen
4) da du kein eigenes manifest nutzt und auch sonst lieber den ganzen pfad nutzen solltest würde sich dann "jar" wie folgt ändern : "jar vcef ch.jfiles.Main deinJarFile.jar ch\jfiles\*.class" wobei die reihenfolge von "e" und "f" zu beachten ist ...

Hallo,

Danke für die Antworten.

Werde die Ordnernamen klein schreiben.
Der Schalter "-d" von "javac", müsste die Ordenerstruktur unterhalb von "classes" automatisch erstellen, so stehts auch im Buch. Aber komischerweise landen die class-Dateien immer im Ordner "classes" und es werden auch keine Unterordner erstellt oder sieht man die nicht im Dateiverzeichnis, wobei die class-Datei sichtbar ist.

Meinst du ich sollte den Schalter "e" benutzen um den Einstiegspunkt der main() Methode anzugeben.
Im Buch stand man sollte eine manifest.txt erzeugen und die jar-Datei funktioniert ja auch.
Also classpath, sollte vom OS konfiguriert sein, falls die jar-Datei auf einem anderen System läuft, müsste ich indemfall eine manifest-Datei erzeugen ?

Wie ist das mit der Reihenfolge von den Schaltern, "vcef" v-verbose(was macht das?) , c-create(jar erstellen) , e-einstiegspunkt(main-methode) , f-file(class-files-ort) ?
"jar vcef ch.jfiles.Main deinJarFile.jar ch\jfiles\*.class" e=ch.jfiles.Main , f= deinJarFile.jar ch\jfiles\*.class ?

Vielen Dank
LeChat
 
T

tröööt

Gast
nun ... ich vermute dann hast du in deinen files kein package deklariert ...
die daten liegen in SRC/ch/jfiles ... also müssen alle daten auch ganz oben als erste zeile [c]package ch.jfiles;[/c] stehen haben ... andernfalls kann es natürlich zu fehlern kommen ...

zum manifest : wie gesagt ... so lange es nur darum geht MAIN anzugeben kann man das ruhig mit "e" machen ... falls allerdings noch mehr infos rein sollen muss man ein eigenes manifest erstellen (richtige dateiendung wäre übrigens MF .. und nicht TXT) und dies dann mit "m" angeben ... wobei dann "e" wegzulassen ist ... (wird glaub ich eh ignoriert falls "m" angegeben wird) ...

die reihenfolge der switches ist desshalb wichtig da javac entsprechend die parameter sortiert ...

gibt man "vcef" an so erwartet jar erst die klasse mit main und dann den namen des zu erzeugenden jar-files ... verwendet man aber z.b. "cfm" so erwartet jar erst das man den namen angibt und dann den pfad zum eigenen manifest ...
die reihenfolge der switches gibt also an in welcher reihenfolge die parameter kommen ... wenn man hier was vertauscht funktionierts nachher nicht ...

"v" steht für "verbose" und erzeugt zusätzlichen info-output ... meist kann man damit schon ne ganze menge fehler beheben wenn am ende was nicht funktioniert da jar hier genau ausgibt was es macht ... und sollte zu debug-zwecken eigentlich immer verwendet werden ...
 

L-ectron-X

Gesperrter Benutzer
Ich finde es auch nicht richtig, dass sich Anfänger gleich, ohne die Hintergrundgeschehnisse zu verstehen, sich auf eine IDE stürzen.
Allerdings: Ich bin auch dafür, dass man sich Werkzeuge baut, die einem die Arbeit leichter machen.
Weil, wenn man sich vertippt, schreibt man eine lange Zeile evtll. noch mal.

Daher gibts zum Erstellen von Jar-Dateien in der FAQ einen schönen Beitrag und auch eine Batchdatei, die einem etwas Arbeit abnehmen kann.
 
T

trääät

Gast
Weil, wenn man sich vertippt, schreibt man eine lange Zeile evtll. noch mal.

hmm ... wenn deine terminals so konfiguriert sind das man nicht mit "UP" durch die vorherigen befehle gehen und diese editieren kann mag das bitte dein problem sein ... CMD.exe unter modernen windows-versionen verwendet standard-mäßig DosKey ... womit es eben entfällt eine lange zeile noch mal komplett schreiben zu müssen ... man drückt einfach "UP" ... geht an die stelle wo der fehler ist ... korrigiert diesen und drückt return ...

zum build-tool : hmm ... braucht man eigentlich eher weniger ... und kann auch teilweise manchmal eher zu fehlern führen wenn man es an einer stelle in einer gewissen weise verwendet die so nicht gedacht war ... dann kommt nämlich auch nur murks bei raus
 
L

LeChat

Gast
nun ... ich vermute dann hast du in deinen files kein package deklariert ...
die daten liegen in SRC/ch/jfiles ... also müssen alle daten auch ganz oben als erste zeile [c]package ch.jfiles;[/c] stehen haben ... andernfalls kann es natürlich zu fehlern kommen ...

zum manifest : wie gesagt ... so lange es nur darum geht MAIN anzugeben kann man das ruhig mit "e" machen ... falls allerdings noch mehr infos rein sollen muss man ein eigenes manifest erstellen (richtige dateiendung wäre übrigens MF .. und nicht TXT) und dies dann mit "m" angeben ... wobei dann "e" wegzulassen ist ... (wird glaub ich eh ignoriert falls "m" angegeben wird) ...

die reihenfolge der switches ist desshalb wichtig da javac entsprechend die parameter sortiert ...

gibt man "vcef" an so erwartet jar erst die klasse mit main und dann den namen des zu erzeugenden jar-files ... verwendet man aber z.b. "cfm" so erwartet jar erst das man den namen angibt und dann den pfad zum eigenen manifest ...
die reihenfolge der switches gibt also an in welcher reihenfolge die parameter kommen ... wenn man hier was vertauscht funktionierts nachher nicht ...

"v" steht für "verbose" und erzeugt zusätzlichen info-output ... meist kann man damit schon ne ganze menge fehler beheben wenn am ende was nicht funktioniert da jar hier genau ausgibt was es macht ... und sollte zu debug-zwecken eigentlich immer verwendet werden ...

Vielen Dank für Eure Antworten sind hilfsreich und informationsreich.

Irgendwie war die Kopie von meiner Main-Datei ohne package angabe, aber bei den nächsten jars werde ich das sicher auch so eintragen.

Noch eine Frage zur jar Erstellung und Ausführung. Wie ist das mit den verschiedenen JRE-Versionen und Betriebsystemen, funktioniert eine mit java7 erstellte jar auch auf java6 oder älter?

Für den Moment gehts mit dem editor und cli gut, bei etwas grösseren werde ich die ide nehmen, aber auch so mal anschauen und probieren.

Nochmals Danke

Schönen Abend
LeChat
 

L-ectron-X

Gesperrter Benutzer
funktioniert eine mit java7 erstellte jar auch auf java6 oder älter?
Die Jar-Erstellung dürfte nicht das Problem sein. Ich denke, dass sich da das Dateiformat nicht weiter verändert hat.
Aber viel wichtiger ist zu wissen, dass Java nur aufwärts kompatibel ist. Also aktuelle Interpreter können mit älteren Compilern kompilierten Java-Code ausführen. Nur anders herum geht das nicht.
Ältere Interpreter können mit Bytecode neuerer Compiler nichts anfangen.
 
L

LeChat

Gast
Hallo,

Danke für die weiteren Antworten.

Das mit dem -target müsste man in der cli aufrufen.
Wobei es steht [c]If -source is not specified, the value of -target is 1.6[/c]
womit von version 1.6 bis zur neusten, es möglich wäre die Datei auszuführen. So hab ich es momentan verstanden.

Habe aber noch eine Frage zum oberen Problem. Die jar-Datei die ich momentan testen wollte, funktioniert nicht, sie wurde gleich erstellt wie eine andere, habe auch den Inhalt kontrolliert mit "-tf" und "-xf" und nichts ungewöhnliches bemerkt.

Die eine die funktioniert ist eine GUI, die andere die nicht funktioniert ist eine Konsolenanwendung.
Habe irgendwo gelesen, dass Konsolenanwendungen nicht als jars ausgeführt werden können, ausser mit etwas Umweg.
Die problem jar probierte ich auf der Konsole auszuführen mit "java -jar file.jar" wobei die Fehlermeldung kam "Datei nicht gefunden!", aber die Datei wurde erstellt und liegt im richtigen Verzeichnis, was auch mit "dir" auf der Konsole und in der Gui zusehen ist.

Wie könnte man das noch etwas genauer analyisieren ?

Vielen Dank
LeChat
 

X5-599

Top Contributor
Also meiner Erfahrung nach braucht man keine Umwege, um eine Konsolen Anwendung als Jar von der Konsole auszuführen.

Ist "Datei nicht gefunden!" denn die genaue Fehlermeldung?
 
L

LeChat

Gast
Noch eine Aktualisierung zum Problem. Die Fehlermeldung habe ich beseitigt, es war ein println("Datei nicht gefunden!") von einer FileNotFoundException, die beim Testen nicht vorkam.

Komisch, weil im Code, ein Befehl vorkommt, der die Java-Klasse [c]Processbuilder[/c] benutzt die ein Konsolenbefehl(Windowstool) aufruft welcher eine Datei erzeugt und etwas reinschreibt.
Ohne jar funktionierts. Mit jar, bei Doppelclick oder über CLI passiert nichts.

Vielleicht kann aus der jar nichts geschrieben werden ?

Möglicherweise kennt jemand die vorgehensweise der jar besser ?

Hier der topic, wo ich gelesen habe das jars keine Konsolenanwenugen ausführen:

http://www.java-forum.org/java-basics-anfaenger-themen/129327-jar-datei-ausfuehren.html


Vielen Dank
LeChat
 
T

trööööt

Gast
Wobei es steht [c]If -source is not specified, the value of -target is 1.6[/c]

leider hat Marco nur auf v6 der doc gelinkt ... wenn du das selbe auf der v7 doc liest steht dort "-target is 1.7" ... also immer die Version die du installiert hast ...

grundlegend ja : man kann z.b. mit "-source 1.6 -target 1.6" angeben das code für ne 6er VM erzeugt wird und die dann auch lauffähig ist .. aber ansonsten ist der code nur auf mindestens der selben Version wie der Compiler und aufwärts lauffähig
 
L

LeChat

Gast
leider hat Marco nur auf v6 der doc gelinkt ... wenn du das selbe auf der v7 doc liest steht dort "-target is 1.7" ... also immer die Version die du installiert hast ...

grundlegend ja : man kann z.b. mit "-source 1.6 -target 1.6" angeben das code für ne 6er VM erzeugt wird und die dann auch lauffähig ist .. aber ansonsten ist der code nur auf mindestens der selben Version wie der Compiler und aufwärts lauffähig

Vielleicht 1.1 angeben dann sollte es auch auf ein paar Jahre ältere Geräte laufen.

Momentan brauch ich nur die neueste, aber leider stimmt etwas nicht mit der jar.

Danke
LeChat
 

X5-599

Top Contributor
Noch eine Aktualisierung zum Problem. Die Fehlermeldung habe ich beseitigt, es war ein println("Datei nicht gefunden!") von einer FileNotFoundException, die beim Testen nicht vorkam.

Komisch, weil im Code, ein Befehl vorkommt, der die Java-Klasse [c]Processbuilder[/c] benutzt die ein Konsolenbefehl(Windowstool) aufruft welcher eine Datei erzeugt und etwas reinschreibt.
Ohne jar funktionierts. Mit jar, bei Doppelclick oder über CLI passiert nichts.

Vielleicht kann aus der jar nichts geschrieben werden ?

Möglicherweise kennt jemand die vorgehensweise der jar besser ?

Hier der topic, wo ich gelesen habe das jars keine Konsolenanwenugen ausführen:

http://www.java-forum.org/java-basics-anfaenger-themen/129327-jar-datei-ausfuehren.html


Vielen Dank
LeChat


Ich hab' das Topic mal überflogen aber nicht festgestellt wo da jemand behauptet, dass jars keine Konsolenanwendungen ausführen.

Es wird darauf hingewiesen, dass wenn man eine Konsolenanwendung geschrieben hat, diese auch per Konsole starten muss. Per einfachem Doppelklick passiert nichts, da keine GUI vorhanden ist.
 

L-ectron-X

Gesperrter Benutzer
Jar-Dateien sind von Hause aus mit dem javaw-Interpreter verknüpft, der aber bei seiner Ausführung im Gegensatz zum java-Interpeter keine Ausgaben in der Konsole macht, weil er keine Konsole öffnet.
Daher müssen Konsolenprogramme, die in Jar-Dateien zusammengefasst sind, mit dem java-Interpreter ausgeführt werden.

Code:
java -jar MeinKonsolenProgramm.jar
 
T

tröööt

Gast
wie ich schon damals in dem gelinkten thread sagte : wenn man eine terminal-anwendung entwickelt muss man diese auch in einem terminal ausführen ... da "JAR" so normalerweise beim doppelklick ohne ein terminal ausgeführt wird (oder besser : es wird dafür gesorgt das dies "versteckt" ist)

wenn ich z.b. ganz einfach in eine main() nur ein sysout schreiben würde und die fertige JAR dann normal auf dem desktop per doppelklick starte ist es völlig normal das "nichts passiert" ... denn das was passiert passiert ja im terminal ... das aber so nicht sichtbar ist ...

wenn man also eine app haben will bei der auch was passiert wenn man diese einfach so startet muss man schon eine GUI dazu basteln die einem auch was anzeigt ...

oder habe ich jetzt irgendwas falsch verstanden ? was genau macht die app und was erwartest du das passiert ? ... und was passiert stattdessen .. oder eben : was passiert eben nicht ?

"funktioniert nicht" ist halt keine sinnvolle fehlerbeschreibung ...
 
L

LeChat

Gast
wie ich schon damals in dem gelinkten thread sagte : wenn man eine terminal-anwendung entwickelt muss man diese auch in einem terminal ausführen ... da "JAR" so normalerweise beim doppelklick ohne ein terminal ausgeführt wird (oder besser : es wird dafür gesorgt das dies "versteckt" ist)

wenn ich z.b. ganz einfach in eine main() nur ein sysout schreiben würde und die fertige JAR dann normal auf dem desktop per doppelklick starte ist es völlig normal das "nichts passiert" ... denn das was passiert passiert ja im terminal ... das aber so nicht sichtbar ist ...

wenn man also eine app haben will bei der auch was passiert wenn man diese einfach so startet muss man schon eine GUI dazu basteln die einem auch was anzeigt ...

oder habe ich jetzt irgendwas falsch verstanden ? was genau macht die app und was erwartest du das passiert ? ... und was passiert stattdessen .. oder eben : was passiert eben nicht ?

"funktioniert nicht" ist halt keine sinnvolle fehlerbeschreibung ...

Danke für die Antworten.

Wollte das gleiche erklären und nicht etwas falsches sagen, dass jars die auf der GUI ausgeführt werden auch nur GUI-Programme beinhalten können und Konsolenanwendungen nur auf der Konsole ausgeführt werden können. Wobei GUI-jars mit javaw.exe und CLI-jars mit java arbeiten.

Zur Problem-Anwendung:

Java:
import java.util.*;
import java.io.*;

public class TaskRemove {
 String name;
 String Name;
 static Process builder1;
 static Process builder2;
 public static void main(String[] args) {
  new TaskRemove().los();
 }

 public void los() { 
  try {  
   FileReader datei = new FileReader("test.txt");
   BufferedReader dat_read = new BufferedReader(datei);
   name = dat_read.readLine();
   Name = "taskA.exe";
   while(name != null) {
    if(name.equals(Name)) {
     builder1 = new ProcessBuilder("cmd", "/c", "taskkill /F /IM taskA.exe /T").start();        
    }
    else {
     los2();
    }
    try {
     Thread.sleep(100);
    } catch(InterruptedException ix) {}
   }
   dat_read.close();
  } catch (FileNotFoundException e) {System.out.println("Datei nicht gefunden!");}
    catch (NullPointerException n) {n.printStackTrace();}
    catch (Exception e) {e.printStackTrace();}
 }

 public void los2() {
  try {
   if(name != AdName) {
    builder2 = new ProcessBuilder("cmd", "/c", "tasklist /SVC /FO LIST > test.txt").start();
    try {
     Thread.sleep(10000);
    } catch(InterruptedException i) {} 
   }
  } catch (Exception ex) {ex.printStackTrace();}
 }
}

Wenn diese Datei kompiliert und ausgeführt wird, funktionierts, nur mit einer jar nicht ?

Vielen Dank
LeChat
 
T

tröööt

Gast
also beim überfliegen hab ich jetzt keine fehler entdeckt ... und es sollte egal sein wie dieser code ausgeführt wird oder in welcher form er vorliegt ...
das einzige was halt n unterschied macht ist das wenn du das ganze zu nem JAR packst und dieses dann einfach ausführst du nichts siehst ... denn alles passiert im "unsichtbaren" terminal ... also müsstest du das programm schon manuell im terminal starten um eventuelle ausgaben sehen zu können ...

auch die verwendung von CMD ist schwachsinn ... ProcessBuilder gibt ein Process objekt zurück an das InputStream und OutputStream gekoppelt werden können so das man selbst eingaben tätigen und ausgaben lesen und eventuell umleiten kann ... CMD ist kein all-heil-mittel .. sondern zeigt nur das man entweder nicht weis wie man richtig mit sub-prozessen arbeitet oder zu faul dafür ist ... bei dir würde ich aber sagen das du es einfach nicht weist ...

und wenn du das ganze als JAR packst und dann wirklich NICHTS passiert ... also die commandos nicht gecallt werden ... würde ich vermuten das du beim zusammenbauen des JAR irgendwas falsch gemacht hast ... denn an sich sollte der code so funktionieren ...
 

X5-599

Top Contributor
Auch: Was ist "AdName"? Und warum vergleichst du damit den String "name"? Obendrein noch mit !=. Auch bin ich mir nicht sicher, ob du nur eine Zeile aus der Datei einlesen willst oder alle. Denn deine while-Schleife ist im Moment eine Endlosschleife, da "name" niemals verändert wird.

Was genau möchtest du also erreichen? Wie soll das Programm arbeiten?
 
L

LeChat

Gast
also beim überfliegen hab ich jetzt keine fehler entdeckt ... und es sollte egal sein wie dieser code ausgeführt wird oder in welcher form er vorliegt ...
das einzige was halt n unterschied macht ist das wenn du das ganze zu nem JAR packst und dieses dann einfach ausführst du nichts siehst ... denn alles passiert im "unsichtbaren" terminal ... also müsstest du das programm schon manuell im terminal starten um eventuelle ausgaben sehen zu können ...

auch die verwendung von CMD ist schwachsinn ... ProcessBuilder gibt ein Process objekt zurück an das InputStream und OutputStream gekoppelt werden können so das man selbst eingaben tätigen und ausgaben lesen und eventuell umleiten kann ... CMD ist kein all-heil-mittel .. sondern zeigt nur das man entweder nicht weis wie man richtig mit sub-prozessen arbeitet oder zu faul dafür ist ... bei dir würde ich aber sagen das du es einfach nicht weist ...

und wenn du das ganze als JAR packst und dann wirklich NICHTS passiert ... also die commandos nicht gecallt werden ... würde ich vermuten das du beim zusammenbauen des JAR irgendwas falsch gemacht hast ... denn an sich sollte der code so funktionieren ...

Danke für die Antworten.

Zu den Sub-Classes habe ich nur in der API unter Proccessbuilder etwas gefunden. Ich denke ich müsste mehr darüber lesen, um etwas zu verbessern.

Habe diesen Text im Internet gefunden, der ascheinend besagt das man unter Windows gewisse nur über CMD aufrufen kann ?

On a Microsoft Windows platform, commands such as "dir" are internal to the command processor so the single command-line argument would be the quoted string: "cmd /c dir" (again, output would depend on the contents of the directory).

Hast du mit den sub-prozessen so etwas wie im unteren Code gemeint ?

Java:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
File log = new File("log");
pb.inheritIO()
pb.getOutputStream() = log;

@X5-599

Die Variabel "AdName" ist ein Schreibfehler, sollte "Name" heissen.
Die Variabel Name vergleiche ich auf Ungleichheit, weil wenn "name != Name" (oder besser [c]!name.equals(Name)[/c]) ist, sollte der Text von der Taskliste in die Datei Test.txt geschrieben werden und wenn "name.equals(Name)" sollte der entsprechende Task gestopt werden.
Mit [c]name = dat_read.readLine();[/c] sollte jede Zeile durchgelesen werden, nicht ?

Vielen Dank

Gute Nacht
LeChat
 
T

tröööt

Gast
naja ... interne kommandos des befehlsprozessors kannst du so natürlich nicht direkt callen .. ich weis aber auch gerade garnicht ob "tasklist" ein solcher interner befehl ist ... laut "HELP" ist er es aber ...

und "String != String" macht keinen sinn denn ... denn "String == String" wird ja nur zutreffen wenn es ein und das selbe objekt ist ... was sicher nicht der fall sein dürfte ... desshalb dürfte auch "String != String" niemals "false" werden und du rennst somit IMMER in den if-block .. hier MUSST du wirklich "!String.equals(String)" schreiben damit dieser ausdruck auch "false" wird wenn beide strings "gleich" sind ...
 

X5-599

Top Contributor
Danke für die Antworten.

@X5-599

Die Variabel "AdName" ist ein Schreibfehler, sollte "Name" heissen.
Die Variabel Name vergleiche ich auf Ungleichheit, weil wenn "name != Name" (oder besser [c]!name.equals(Name)[/c]) ist, sollte der Text von der Taskliste in die Datei Test.txt geschrieben werden und wenn "name.equals(Name)" sollte der entsprechende Task gestopt werden.
Mit [c]name = dat_read.readLine();[/c] sollte jede Zeile durchgelesen werden, nicht ?

Vielen Dank

Gute Nacht
LeChat

Das mit dem != gegenüber equals wurde ja bereits erwähnt (Zum String Vergleich immer equals() nehmen). Das "name = dat_read.readLine();" ist schon richtig. Das liest eine neue Zeile ein. Allerdings steht dieser Aufruf außerhalb deiner while-Schleife und wird somit nur einmal aufgerufen. Darum die Endlosschleife.

Vielleicht hast du's aber schon selbst gelöst. Kannst dich ja nochmal melden falls nochwas unklar sein sollte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A exe Datei erstellen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
J Erstellen einer Datei ohne path Java Basics - Anfänger-Themen 1
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
agent47 Input/Output Ordner/Datei Rekutrsiv erstellen und Java Basics - Anfänger-Themen 8
I Ausführbare .jar oder .exe Datei erstellen Java Basics - Anfänger-Themen 4
O Zip Datei erstellen Java Basics - Anfänger-Themen 1
M .jar Datei mit Eclipse erstellen (OpenCV) Java Basics - Anfänger-Themen 2
A Datei im erstelltem Verzeichnis erstellen? Java Basics - Anfänger-Themen 1
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3
G Txt datei erstellen Java Basics - Anfänger-Themen 2
Z Java txt Datei erstellen lassen Java Basics - Anfänger-Themen 6
D Datei mit JFileChooser erstellen Java Basics - Anfänger-Themen 5
GadgetSofa .txt Datei erstellen und gleich wieder Löschen? Java Basics - Anfänger-Themen 12
S Ausführbare Datei erstellen Java Basics - Anfänger-Themen 12
H Erste Schritte Datei erstellen Java Basics - Anfänger-Themen 5
S externe Datei erstellen, oeffnen, bearbeiten Java Basics - Anfänger-Themen 2
O Jar Datei erstellen geht nicht. Java Basics - Anfänger-Themen 4
V BlueJ: Funktionierende .jar Datei erstellen Java Basics - Anfänger-Themen 2
H config Datei erstellen + einlesen Java Basics - Anfänger-Themen 15
S jar Datei erstellen mit eclipse Java Basics - Anfänger-Themen 4
E Java Datei erstellen? :) Java Basics - Anfänger-Themen 3
S Datei nicht erstellen Java Basics - Anfänger-Themen 16
S Bin Datei erstellen Java Basics - Anfänger-Themen 12
Maxim6394 .jar Datei erstellen und starten Java Basics - Anfänger-Themen 3
M jar Datei erstellen - Fehler Java Basics - Anfänger-Themen 13
Luk10 Problem beim .jar Datei erstellen Java Basics - Anfänger-Themen 19
N editierbare Datei erstellen Java Basics - Anfänger-Themen 14
B Datei in einem Unterverzeichnis erstellen Java Basics - Anfänger-Themen 10
S Ausführbare datei erstellen Java Basics - Anfänger-Themen 7
A Input/Output Datei automatisch erstellen. Java Basics - Anfänger-Themen 29
W Jar Datei in Eclipse-Projekt erstellen Java Basics - Anfänger-Themen 2
K Komisches Verhalten beim erstellen einer Datei Java Basics - Anfänger-Themen 5
T Erstellen einer .csv-Datei Java Basics - Anfänger-Themen 12
W [Java Archive (JAR) Datei erstellen] Lässt sich nicht ausfürhren Java Basics - Anfänger-Themen 7
C FatJar: Jar-Datei mit jmf.jar erstellen Java Basics - Anfänger-Themen 7
M java neue datei erstellen Java Basics - Anfänger-Themen 6
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
Ollek Erstellen einer ausführbaren JAR-Datei mit externen Libaries Java Basics - Anfänger-Themen 9
B JAR Datei mit NetBeans erstellen und ausführen Java Basics - Anfänger-Themen 23
M Datei automatisch erstellen Java Basics - Anfänger-Themen 5
V jar datei erstellen Java Basics - Anfänger-Themen 4
K Eine Datei erstellen Java Basics - Anfänger-Themen 2
B Wie kann ich eine dauerhaft ausführbare Datei erstellen? Java Basics - Anfänger-Themen 6
G JAR Datei richtig erstellen? Java Basics - Anfänger-Themen 2
C Erstellen und Beschreiben einer HTML-Datei Java Basics - Anfänger-Themen 4
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
D neue Datei inkl. Ordner erstellen - in einem Rutsch? Java Basics - Anfänger-Themen 7
S jar-Datei erstellen Java Basics - Anfänger-Themen 3
G JAR Datei mit Eclipse erstellen? Java Basics - Anfänger-Themen 5
T-Yasso CSV Datei erstellen & Strings in die CSV überführen. Java Basics - Anfänger-Themen 3
G Erstellen einer JAR-Datei mit Ant-Scrit schlägt fehl Java Basics - Anfänger-Themen 2
K aus Java Programme Jar.datei erstellen (eclipse) Java Basics - Anfänger-Themen 15
G JAR-Datei in Eclipse erstellen Java Basics - Anfänger-Themen 7
G Log-Datei erstellen Java Basics - Anfänger-Themen 2
G datei im jar-file erstellen Java Basics - Anfänger-Themen 7
S Datei erstellen Java Basics - Anfänger-Themen 4
B bat Datei erstellen und ausführen / keine ausführung Java Basics - Anfänger-Themen 3
M Jar-Datei erstellen Java Basics - Anfänger-Themen 7
A Ausführbare jar-Datei erstellen (mit Eclipse) - main-class? Java Basics - Anfänger-Themen 4
S .class datei erstellen Java Basics - Anfänger-Themen 5
O datei erstellen in jar archiv? Java Basics - Anfänger-Themen 4
J Exe- datei alls Selbständige erstellen Java Basics - Anfänger-Themen 2
P Eclipse: Jar Datei erstellen? Java Basics - Anfänger-Themen 2
F CSV Datei erstellen! Java Basics - Anfänger-Themen 9
S [JBuilder] Class Datei erstellen? Java Basics - Anfänger-Themen 17
M Jar-Datei erstellen Java Basics - Anfänger-Themen 2
A jar.* Datei erstellen. Java Basics - Anfänger-Themen 2
U jar Datei erstellen Java Basics - Anfänger-Themen 20
G Problem beim erstellen einer .jar Datei Java Basics - Anfänger-Themen 9
C Datei größer als 2 GB erstellen Java Basics - Anfänger-Themen 3
D Checksumme für Datei erstellen Java Basics - Anfänger-Themen 4
B Erstellen einer ausführbaren Datei Java Basics - Anfänger-Themen 3
C *.exe Datei erstellen Java Basics - Anfänger-Themen 3
M JAR-Datei mit Eclipse einschließlich SWT erstellen Java Basics - Anfänger-Themen 12
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
A CSV-Datei Verarbeiten Java Basics - Anfänger-Themen 8
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben