2 Stimmen

Erstellen eines lauffähigen JAR, das .exe-Dateien enthält, mit Eclipse

Hey Jungs - Ich habe durch eine Fülle von Foren online sowie fragte viele professionelle Java-Entwickler, aber ich war nicht in der Lage, angemessene Unterstützung bei der Erstellung einer eigenständigen lauffähigen jar-Datei von einer finanziellen Anwendung, die ich derzeit fertig zu finden. Die Anwendung verwendet zwei externe Programme: ein ImageMagick-Dateikonvertierungsprogramm namens convert und ein OCR-Programm namens gocr045. Ich habe diese Anwendung mit Eclipse entwickelt und mehrmals versucht, den Inhalt mit dem Assistenten zur automatischen Erstellung von lauffähigen JAR-Dateien zu verpacken. Auf meinem Rechner funktioniert alles gut und meine Anwendung funktioniert, wie sie soll, aber aus irgendeinem Grund, wenn die Anwendung auf einem anderen Computer ausgeführt wird, kompiliert sie und die GUI wird angezeigt, aber die beiden externen Funktionen funktionieren nicht. Ich habe diese Funktionen auf den anderen Rechnern installiert, aber bisher ist die einzige Lösung, die ich für dieses Problem gefunden habe, die manuelle Erstellung von lauffähigen Jars auf den Rechnern über Eclipse. Das wird leider nicht funktionieren, da die App nach ihrer Fertigstellung vermarktet werden soll und ich kann nicht einfach eclipse installieren und dann die App für jeden Benutzer, der sie kauft, installieren. Ich vermute, dass es sich um ein triviales Problem handelt, das Java-Experten wie Sie hoffentlich in kürzester Zeit für mich lösen können. Hat es möglicherweise etwas mit dem Signieren der jar-Datei zu tun?

Vielen Dank und ich hoffe, bald von Ihnen zu hören,

Mark Kogan KoganApps (www.koganapps.com)

0voto

Michael Rutherfurd Punkte 13367

Wurden die separaten Exe-Dateien dem PATH auf Ihrem Rechner hinzugefügt? Wenn Sie nicht den vollständigen Pfad zur Exe angeben, wenn Sie die Methode Runtime.exec() aufrufen, wird der Speicherort möglicherweise aus dem Systempfad übernommen.

Ich würde

  1. Bestätigen Sie, dass sich die Exemplare an einem bekannten Ort in Bezug auf den Standort des Gefäßes befinden.
  2. Die Methode Runtime.exec() verwendet diese bekannte relative Position
  3. Vergewissern Sie sich, dass sich keine Exen im Glas befinden (ich glaube nicht, dass es funktioniert, wenn sie es tun).

Ich glaube nicht, dass die Unterzeichnung etwas damit zu tun hat.

0voto

Mark Kogan Punkte 1

Rafe: Letztlich soll die Anwendung sowohl unter Windows als auch unter Mac laufen. Ich werde eine externe Software verwenden, um die exe-Dateien auf dem Mac in solche zu konvertieren, die auf Mac OS X laufen. Anschließend werde ich die Methode Runtime.exec() für diese konvertierten Dateien aufrufen

Mike - Ich vermutete, dass dies der Fall war, da ich keinen direkten Pfad zu den externen Programmen angab und der Systempfad wahrscheinlich abgeleitet wurde, wenn das jar nicht auf meinem Computer ausgeführt wurde. Die Anwendung besteht jedoch aus einem JApplet, das in einen JFrame eingepackt ist; könnten die Sicherheitseinschränkungen für ein Applet etwas mit den Problemen zu tun haben, die ich habe? Und natürlich befinden sich meine Exes außerhalb der Jar-Datei in einem externen Ordner, aus dem sie aufgerufen werden, weil der ClassLoader keine externen Programme in derselben Jar-Datei ausführen kann, in der er instanziiert wird

Vielen Dank für die Hilfe, Jungs, und ich werde mich in Kürze mit meinen Ergebnissen zurückmelden - hoffentlich klappt es jetzt

0voto

Favonius Punkte 13720

Wie Sie schon sagten there is a JApplet wrapped in a JFrame Es könnte sich also um eine Sicherheitsausnahme handeln. Wenn Sie ein JDK auf Ihrem System installiert haben und Eclipse verwenden, wird die JRE normalerweise aus dem JDK-Ordner geholt. Sobald Sie es als lauffähige JAR-Datei bündeln und versuchen, es auf einem anderen System auszuführen, besteht die Möglichkeit, dass es die java.exe von c:\program files\java\jre\bin wenn dies der Fall ist, wird Ihre Anwendung nicht funktionieren, es sei denn, sie ist ordnungsgemäß signiert und mit den erforderlichen Zugriffsrechten ausgestattet.

Führen Sie also die folgende Prüfung durch:

  1. welches jre auf Ihrem System verwendet wird. ob es innerhalb von jdk oder c:\program files\java\jre\bin
  2. überprüfen Sie dasselbe auf den anderen Systemen, auf denen Sie Ihre Anwendung bereitgestellt haben

Hinweis : Ich bin davon ausgegangen, dass Sie alle erforderlichen Pfadvariablen gesetzt haben.

Anregung :

  1. Falls Sie Zugriff auf den Quellcode der ImageMagick y JOCR dann eine DLL daraus machen und mit JNA ( https://jna.dev.java.net/ ), um sie anzurufen.
  2. JPanel anstelle von JApplet verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X