Hallo Kollegen,
wenn jemand weiß, wie ich ein SWT-Programm standalone starten kann ohne igendwas hin- und herzukopieren oder was fest in irgendwelche Pfade einzutragen, sagt mal bitte bescheid.
Ich hab hier eines, daß in der Eclipse funktioniert, aber ich möchte das gerne weitergeben und man soll es dann einfach über ein Startskript (je eines für Win und Lin) starten können.
Für Linux hab ich probiert das "swt.jar" und "swt-pi.jar" mit in mein Programmverzeichnis zu kopieren und dann erst mal so zu starten:
"java -cp /home/spunti/workspace/GUIProject -Djava.library.path=/usr/local/share/eclipse/plugins/org.eclipse.swt.gtk_3.0.1/os/linux/x86 GUIFrame"
Klappt aber nicht und es kommt der Fehler:
"Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite"
(Mal ganz abgesehen davon, daß ich dieses lange Verzeichnis mit den .so-Dateien dann wohl auch noch mitkopieren müßte?)
grüße
spunti
Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
SWT-Programm standalone starten (Java, Eclipse)?
Moderator: Moderatoren
du brauchst im Classpath ALLE jar files, auch die von SWT !!"java -cp /home/spunti/workspace/GUIProject -Djava.library.path=/usr/local/share/eclipse/plugins/org.eclipse.swt.gtk_3.0.1/os/linux/x86 GUIFrame"
du kannst in einem Script folgendes tun:
Code: Alles auswählen
PROGRAMM_DIR=<pfad wo swt jars stehen>
# build the classpath
for FILE in ${PROGRAM_DIR}/*.jar; do
SWTCLASSPATH="${SWTCLASSPATH:+${SWTCLASSPATH}:}$FILE"
done
CLASSPATH=<eigene jars>
java -cp $CLASSPATH:$SWTCLASSPATH ...
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
PackMan
LinWiki : Das Wiki für Linux User
Dein Skript will bestimmt meinen Classenpfad verändern, das will ich ja nicht (allen die mein Programm benutzen wollen zumuten). Aber ich glaube, du hast mich schon etwas weitergebracht.
Ich hab jetzt mal:
"java -cp /home/ronny/workspace/GUIProject/swt.jar:/home/ronny/workspace/GUIProject/swt-pi.jar -Djava.library.path=/usr/local/share/eclipse/plugins/org.eclipse.swt.gtk_3.0.1/os/linux/x86 GUIFrame"
Also noch mal explizit den Dateinamen von "swt.jar" und "swt-pi.jar" angegeben und jetzt meckert er was anderes, nämlich:
Exception in thread "main" java.lang.NoClassDefFoundError: GUIFrame
Was aber auch ziemlich blöd ist, da GUIFrame ja meine Startklasse ist und ich auch in dem richtigen Verzeichnis bin und es auch GUIFrame.class gibt:-(
spunti
Ich hab jetzt mal:
"java -cp /home/ronny/workspace/GUIProject/swt.jar:/home/ronny/workspace/GUIProject/swt-pi.jar -Djava.library.path=/usr/local/share/eclipse/plugins/org.eclipse.swt.gtk_3.0.1/os/linux/x86 GUIFrame"
Also noch mal explizit den Dateinamen von "swt.jar" und "swt-pi.jar" angegeben und jetzt meckert er was anderes, nämlich:
Exception in thread "main" java.lang.NoClassDefFoundError: GUIFrame
Was aber auch ziemlich blöd ist, da GUIFrame ja meine Startklasse ist und ich auch in dem richtigen Verzeichnis bin und es auch GUIFrame.class gibt:-(
spunti
nein mein script WILL NICHT den Classpath für alle ändern ...spunti hat geschrieben:Dein Skript will bestimmt meinen Classenpfad verändern, das will ich ja nicht (allen die mein Programm benutzen wollen zumuten). Aber ich glaube, du hast mich schon etwas weitergebracht.
Ich hab jetzt mal:
"java -cp /home/ronny/workspace/GUIProject/swt.jar:/home/ronny/workspace/GUIProject/swt-pi.jar -Djava.library.path=/usr/local/share/eclipse/plugins/org.eclipse.swt.gtk_3.0.1/os/linux/x86 GUIFrame"
Also noch mal explizit den Dateinamen von "swt.jar" und "swt-pi.jar" angegeben und jetzt meckert er was anderes, nämlich:
Exception in thread "main" java.lang.NoClassDefFoundError: GUIFrame
Was aber auch ziemlich blöd ist, da GUIFrame ja meine Startklasse ist und ich auch in dem richtigen Verzeichnis bin und es auch GUIFrame.class gibt:-(
spunti
und du SOLLST ALLE jars in deinem Classpath aufnehmen ...
also deine eigenen, die von java und die von SWT
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
PackMan
LinWiki : Das Wiki für Linux User
Man stell ich mich heute blöd an.
Also ich seh jetzt erst, daß du SWTCLASSPATH als eigene Variable bei dir hast. Das hatte ich bis jetzt immer überlesen und das probier ich gleich mal. (Allerdings muß ich dafür ja echt Variablen setzen und dafür gibts wohl leider kein Startparameter wie -cp ?).
Dein schönes Skript hab ich bis jetzt noch nicht ausprobiert, weil ich es ganz einfach nicht nachvollziehen kann. Von Shellprogrammierung hab ich noch gar keine Ahnung. (Und wenn ich es nachvollziehen könnte, würde ich das erst mal per Hand einhämmern, was ich jetzt noch probieren werde.)
spunti
PS: Und eigene jars hab ich noch gar nicht. (Auch wenn ich das zwischenzeitlich schon heimlich probiert hatte.) Aber das wäre dann ja schon wieder eine neue Fehlerquelle und soviel erwarte ich gar nicht vom neuen Jahr.
Also ich seh jetzt erst, daß du SWTCLASSPATH als eigene Variable bei dir hast. Das hatte ich bis jetzt immer überlesen und das probier ich gleich mal. (Allerdings muß ich dafür ja echt Variablen setzen und dafür gibts wohl leider kein Startparameter wie -cp ?).
Dein schönes Skript hab ich bis jetzt noch nicht ausprobiert, weil ich es ganz einfach nicht nachvollziehen kann. Von Shellprogrammierung hab ich noch gar keine Ahnung. (Und wenn ich es nachvollziehen könnte, würde ich das erst mal per Hand einhämmern, was ich jetzt noch probieren werde.)
spunti
PS: Und eigene jars hab ich noch gar nicht. (Auch wenn ich das zwischenzeitlich schon heimlich probiert hatte.) Aber das wäre dann ja schon wieder eine neue Fehlerquelle und soviel erwarte ich gar nicht vom neuen Jahr.
du kannst alle Pfade zu jar-Dateien in eine -cp <pfad1>:<pfad2>:<pfad3> ... schreiben. Aber darunter leidet IMHO die Übersichtlichkeit, deshalb definiere dir pro "logischer" Gruppe eine eigne Variable.spunti hat geschrieben:Man stell ich mich heute blöd an.
Also ich seh jetzt erst, daß du SWTCLASSPATH als eigene Variable bei dir hast. Das hatte ich bis jetzt immer überlesen und das probier ich gleich mal. (Allerdings muß ich dafür ja echt Variablen setzen und dafür gibts wohl leider kein Startparameter wie -cp ?).
Dein schönes Skript hab ich bis jetzt noch nicht ausprobiert, weil ich es ganz einfach nicht nachvollziehen kann. Von Shellprogrammierung hab ich noch gar keine Ahnung. (Und wenn ich es nachvollziehen könnte, würde ich das erst mal per Hand einhämmern, was ich jetzt noch probieren werde.)
spunti
PS: Und eigene jars hab ich noch gar nicht. (Auch wenn ich das zwischenzeitlich schon heimlich probiert hatte.) Aber das wäre dann ja schon wieder eine neue Fehlerquelle und soviel erwarte ich gar nicht vom neuen Jahr.
und ich schreibe mir für jedes java-Programm ein eigenes Startscript, nach obigem Schema:
Beispiel für azureus:
Code: Alles auswählen
#! /bin/bash
#####################################################
# set paths
#####################################################
LOGFILE=/home/ich/tmp/azureus.log
SWT_LIBS=/opt/eclipse/swt-3
JAVA_LIBS=/opt/Java
# 1.4.2
#JAVA_PROGRAM_DIR=/usr/lib/SunJava2-1.4.2/jre/bin
# 1.5.0
JAVA_PROGRAM_DIR=/usr/bin
#####################################################
# set all jars in classpath
#####################################################
CLASSPATH=""
for FILE in Azureus2; do
CLASSPATH="$JAVA_LIBS/"$FILE".jar:$CLASSPATH"
done
for FILE in swt swt-pi swt-mozilla; do
CLASSPATH="$SWT_LIBS/"$FILE".jar:$CLASSPATH"
done
#####################################################
# start Azureus
#####################################################
$JAVA_PROGRAM_DIR/java -cp $CLASSPATH -Djava.library.path="$SWT_LIBS" org.gudy.azureus2.ui.swt.Main "$@" 2> $LOGFILE
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
PackMan
LinWiki : Das Wiki für Linux User
Och, nöö. Jetzt seh ich, daß du beim Aufruf doch alles mit "-cp" aufrufst: "java -cp $CLASSPATH:$SWTCLASSPATH"
Also kann ich das doch gleich alles da reinschreiben...
Wenn es klappt, sag ich nachher noch mal kurz bescheid, ansonsten ist das für meine Nerven heute einfach zu viel und ich probiere morgen weiter.
spunti
Also kann ich das doch gleich alles da reinschreiben...
Wenn es klappt, sag ich nachher noch mal kurz bescheid, ansonsten ist das für meine Nerven heute einfach zu viel und ich probiere morgen weiter.
spunti
da haben wir uns grade überschnitten... siehe oben
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
PackMan
LinWiki : Das Wiki für Linux User