Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

SWT-Programm standalone starten (Java, Eclipse)?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

SWT-Programm standalone starten (Java, Eclipse)?

Beitrag von spunti »

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
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

"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 brauchst im Classpath ALLE jar files, auch die von SWT !!

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>
und dann
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
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti »

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
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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
nein mein script WILL NICHT den Classpath für alle ändern ...
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
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti »

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.
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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.
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.

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
as hat den Vorteil das ich für neue JDKs nur an EINER Stelle ändern muss!
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti »

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
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti »

danke, es läuft!

Es lag daran, daß ich anfangs die dateien.jar nicht mit angegeben hatte, sondern nur das Verzeichnis.
Und dann später hatte ich direkt die dateien.jar angegeben, aber das Verzeichnis MUSS auch drinstehen, wenn dort die dateien.class drin sind und nicht in einem jar.

spunti
Antworten