c Programm läuft nicht in compilierter Version des Java Projektes

Joob

Top Contributor
Ich habe ein kleines C Programm programmiert.
Das habe ich in mein Java Projekt eingebunden.
Gespeichert unter Resources. Sieht man ja in der Fehlermeldung.

In der IDE läuft alles.
Wenn ich die kompilierte Datei entpacke und die Batch aufrufe läuft es nicht.
Muss ich das Programm woanders speichern um es zu verwenden ? (Noch mal in der IDE funktioniert es )

Das erscheint im CMD.

Jan. 16, 2022 6:52:34 PM org.joobsoft.vt.SYS.General.DoJob codj1
WARNING: null
java.io.IOException: Cannot run program "C:\Users\Jupp\Desktop\VTDESKTOP\bin\src\main\resources\SYS\Filesource\gpfsc.exe": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1142)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
at org.joobsoft.vt.SYS.General.DoJob.codj1(DoJob.java:33)
at org.joobsoft.vt.SYS.General.DoJob.dj1(DoJob.java:21)
at org.joobsoft.vt.MAIN.MainFX.setSysVar(MainFX.java:347)
at org.joobsoft.vt.MAIN.MainFX.LoginWindow(MainFX.java:147)
at org.joobsoft.vt.MAIN.MainFX.start(MainFX.java:121)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.io.IOException: CreateProcess error=2, Das System kann die angegebene Datei nicht finden
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:483)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1109)
... 15 more

Result :

Im Programm habe ich ähnliche Effekte bei dem fxml Files. Einige kann er nicht finden, in der IDE läuft alles OK.
Das das Result leer ist scheint ein anders Problem zu sein. Plötzlich gibt das C Programm nur noch in der IDE aus
und in der Comandozeile nicht mehr.
 
Ich verwende Netbeans.
Wenn ich das Projekt builde werden unter Distributions zwei komprimierte Dateien erstellt
Diese enthalten jars von z.B. jasper usw. sowie die jar des Programms, desweiteren eine batch.
Wenn die Batch ausgeführt wird startet das Programm.

Und hier beginnen die Probleme.
Einige fxmls werden nicht gefunden, obwohl Sie in einem Folder liegen in dem andere ausgeführt werden.

Ich denke das Problem mit der exe ist das man diese nicht zu den Dateien in die Resources legen darf wenn man diese ausführen will, obwohl ich das nicht verstehe da dort auch eine DLL von jsch liegt und auch die Mp3 und mp4 ausgeführt werden müsssen.

Zu deiner Frage:
Das System kann den angegeben Pfad nicht finden.

Lasse ich aber das Programm per Batch laufen können mp3 welche sich im gleichen Verzeichnis befinden abgespielt werden, auch werden die verschieden Grafiken angezeigt.

Zugriff im Programm erfolgt immer per:
private String logo = "/SYS/Filesource/LogoAPP.png";
LogoVT.setImage(new Image(getClass().getResource(logo).toString()));

Was mich besonders irritiert ist, das das Programm in der IDE einfach läuft.
Das C Programm wird ausgeführt, und liefert als Comandozeilenprogramm einen String zurück, so wie es sein soll.

In der Jar des Programms gibt es Verweise auf alle Klassen des Projekts.

Ich wollte aber eine komplette Umgebung für die Installation zusammenstellen. Wo muss ich da was ändern. Ich verwende Gradel.
 
Ich habe jetzt einfach mal die Resources an die entsprechende Stelle kopiert und siehe da das c Programm läuft.

Bleiben zwei Fragen:
Warum werden die FXML nicht gezeigt.
Wie muss ich das Projekt im Build konfigurieren damit das Resourcenverzeichnis direkt mitgenommen wird.
 
Folgende Exception hinsichtlich des fxml
beim diesem Code, was in der Regel darauf hindeutet das das fxml nicht da ist.

Ist aber da und läuft auch in der IDE.

FXMLLoader loader = new FXMLLoader(getClass().getResource("/PVA00000/Views/You/YouTVChats.FXML"));
Pane panevarfxmlfile = (Pane) loader.load();

Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2541)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2516)
at org.joobsoft.vt.PVA00000.Controller.You.YouController.showChats(YouController.java:206)
at org.joobsoft.vt.PVA00000.Controller.You.YouController.showArea(YouController.java:138)
at org.joobsoft.vt.PVA00000.Controller.You.YouController$1.changed(YouController.java:105)
at org.joobsoft.vt.PVA00000.Controller.You.YouController$1.changed(YouController.java:97)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:80)
at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:105)
at javafx.scene.control.MultipleSelectionModelBase.lambda$new$0(MultipleSelectionModelBase.java:67)
at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:136)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:78)
at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:114)
at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:148)
at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:69)
at javafx.scene.control.MultipleSelectionModelBase.select(MultipleSelectionModelBase.java:413)
at javafx.scene.control.MultipleSelectionModelBase.clearAndSelect(MultipleSelectionModelBase.java:360)
at javafx.scene.control.TreeView$TreeViewBitSetSelectionModel.clearAndSelect(TreeView.java:1529)
at com.sun.javafx.scene.control.behavior.CellBehaviorBase.simpleSelect(CellBehaviorBase.java:282)
at com.sun.javafx.scene.control.behavior.CellBehaviorBase.doSelect(CellBehaviorBase.java:246)
at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:176)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3897)
at javafx.scene.Scene.processMouseEvent(Scene.java:1878)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2623)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
at com.sun.glass.ui.View.handleMouseEvent(View.java:557)
at com.sun.glass.ui.View.notifyMouse(View.java:943)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:831)
 
Ich verwende Netbeans.
Wenn ich das Projekt builde werden unter Distributions zwei komprimierte Dateien erstellt
Diese enthalten jars von z.B. jasper usw. sowie die jar des Programms, desweiteren eine batch.
Wenn die Batch ausgeführt wird startet das Programm.

Und hier beginnen die Probleme.
Einige fxmls werden nicht gefunden, obwohl Sie in einem Folder liegen in dem andere ausgeführt werden.

Ich denke das Problem mit der exe ist das man diese nicht zu den Dateien in die Resources legen darf wenn man diese ausführen will, obwohl ich das nicht verstehe da dort auch eine DLL von jsch liegt und auch die Mp3 und mp4 ausgeführt werden müsssen.

Zu deiner Frage:
Das System kann den angegeben Pfad nicht finden.

Lasse ich aber das Programm per Batch laufen können mp3 welche sich im gleichen Verzeichnis befinden abgespielt werden, auch werden die verschieden Grafiken angezeigt.

Zugriff im Programm erfolgt immer per:
private String logo = "/SYS/Filesource/LogoAPP.png";
LogoVT.setImage(new Image(getClass().getResource(logo).toString()));

Was mich besonders irritiert ist, das das Programm in der IDE einfach läuft.
Das C Programm wird ausgeführt, und liefert als Comandozeilenprogramm einen String zurück, so wie es sein soll.

In der Jar des Programms gibt es Verweise auf alle Klassen des Projekts.

Ich wollte aber eine komplette Umgebung für die Installation zusammenstellen. Wo muss ich da was ändern. Ich verwende Gradel.
 
Ich denke das Problem mit der exe ist das man diese nicht zu den Dateien in die Resources legen darf wenn man diese ausführen will, obwohl ich das nicht verstehe da dort auch eine DLL von jsch liegt und auch die Mp3 und mp4 ausgeführt werden müsssen.
Ja, Du kannst eine EXE nicht einfach so starten, die sich in einer anderen Datei befindet. Dazu musst du die EXE erstmal ins Dateisystem schreiben.

Daten sind kein Problem, da Java mit Dateien in JARs umgehen kann. Bei DLLs würde ich eher vermuten, dass es nicht funktioniert. Eventuell wird die DLL gar nicht benötigt?

Was mich besonders irritiert ist, das das Programm in der IDE einfach läuft.
Das C Programm wird ausgeführt, und liefert als Comandozeilenprogramm einen String zurück, so wie es sein soll.
Ja, das kann schon sein. Die IDE könnte auf Basis der gebuildeten Klassen starten und hätte dann die Ressourcen im Dateisystem verfügbar oder könnte den Ressourcen-Ordner in den Classpath hängen. Ich weiß nicht, wie das be Gradle läuft; unter Maven zeigt Dir NetBeans an, was es ausführt.
 
DLLs in Jars ergeben wenigh Sinn, die können von C-Programmen und ähnlichem nicht gefunden werden.
Dein externes C-Programm sollte entweder direkt auf der Platte liegen oder während der Lauftzeit in ein Temp-Verzeichnis entpackt werden.

Aber du hast mich auf einen interessanten Gedanken gebracht. Ich spreche DLLs über JNA an, ich muss mal sehen, ob ich diese DLL auch in eine Jar-Datei packen und als Resource ansprechen kann anstatt über den Dateinamen ... aber ich glaube nicht.
 

Zurück
Oben