SWT SWT-jar = portabel?

Status
Nicht offen für weitere Antworten.

ttplayer

Aktives Mitglied
Ich hab mal ein kleines SWT-Programm geschrieben und in ein jar-File gepackt.
Bei mir auf Vista läuft das auch wunderbar aber auf XP oder Linux passiert da gar nichts.
Bei Linux ists ja auch irgendwie logisch weil bei SWT DLLs drin sind.
Kann man ein SWT-Programm auch so übersetzen, dass es auf Linux und Mac läuft oder wenigstens auf XP?
PS: Ich weiß nicht, ob es auf anderen Vista-PCs läuft

Vielen Dank im Voraus:)
 

Michael...

Top Contributor
Würde mal sagen du musst die entsprechenden SWT Klassen mitliefern. Die sind ja nich standardmässig auf jedem Rechner vorhanden.
 

ttplayer

Aktives Mitglied
D.h. wenn ich das für Linux portieren will, muss ich SWT für Linux runterladen und neu kompilieren...
Bloß gibt es für XP gar kein extra SWT, das ist für alle Windows-OS gleich...
 

Michael...

Top Contributor
D.h. wenn ich das für Linux portieren will, muss ich SWT für Linux runterladen und neu kompilieren...
Bloß gibt es für XP gar kein extra SWT, das ist für alle Windows-OS gleich...
komplieren muss man da vermutlich nichts. ich nehme mal das es ein oder mehrere .jar Dateien gibt, die man mit seinem Projekt mitliefern und in den ClassPath aufnehmen muss.
 

ttplayer

Aktives Mitglied
Man muss zuerst den Quelltext mit der swt.jar im classpath mit dem javac in CLASS-Files umwandeln und dann den kompletten org-Ordner und die SWT-DLLs sowie die .class-Files in die JAR-Datei packen.
 

Wildcard

Top Contributor
Du musst nur das richtige swt.jar für die richtige Plattform ausliefern. Neu kompilieren musst du dazu nichts.
Warum nimmst du nicht einfach Eclipse RCP, damit lässt sich die Verteilung der platformspezifischen binaries sehr einfach realisieren
 

ttplayer

Aktives Mitglied
Du musst nur das richtige swt.jar für die richtige Plattform ausliefern. Neu kompilieren musst du dazu nichts.
Warum nimmst du nicht einfach Eclipse RCP, damit lässt sich die Verteilung der platformspezifischen binaries sehr einfach realisieren
Ich benutze kein Eclipse, weil ich ein Programm schreiben will, das die JAR-Datei selbstständig erstellt.:)
 

ttplayer

Aktives Mitglied
Wenn ich ein Jar-File erstelle mit:
jar cvfm jarfile.jar Manifest.txt -C Pfad\zum\SWT\Ordner\org . Pfad\zu\den\class\files\*.class

1. Was muss ich statt des Punkts schreiben, damit er in mein jar-File nicht Pfad\zum\SWT\Ordner\org\eclipse\swt\[...] reinschreibt, sondern org\eclipse\swt\[...]

2. Wie mache ich das, dass er die *.class-Dateien nicht ebenfalls in Pfad\zu\den\class\files\ - Ordner in dem Archiv schreibt?
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
Ich hab meine Anwendung ja mit Eclipse geschrieben, aber ich will sie halt von Hand kompilieren können.
Vielleicht verstehe ich auch einfach nicht, was du mit Rich Client Platform meinst...

Und übrigens: Wenn ich die Anwendung direkt unter Eclipse kompiliere, hab ich das gleiche Problem, dass das unter XP nicht läuft wegen der Main-class...
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Eclipse ist keine Java IDE, sondern eine Plattform für alle Arten von Applikationen. Die Java IDE ist nur eine Sammlung von PlugIns die in dieser Plattform installiert werden. Eclipse kann genau so aussehen wie du es haben möchtest, bringt dir aber jede Menge Technologie Goodies mit die du einfach verwenden kannst. Die Frage ist also: wenn du eine SWT Anwendung schreibst, warum dann nicht gleich eine Eclipse RCP um von all der Eclipse Technologie zu profitieren, anstatt nur den winzigen SWT Teil rauszupicken.
 

ttplayer

Aktives Mitglied
Sorry, aber ich versteh das so als ob Eclipse RCP ein Toolkit wie SWT wäre??
Oder meinst du, dass Eclipse seine eigenen Widgets zur Verfügung stellt und der Editor auf dieser Plattform geschrieben ist? Dann müsste ja jeder Eclipse installiert haben, der die jar-files ausführen will...???:L
 

Wildcard

Top Contributor
Vereinfacht gesagt, SWT ist ein Windowing Toolkit, Eclipse RCP ist ein Application 'Toolkit'. EIn großer Werkzeugkasten der dir erlaubt fantastische Anwendungen in einem Bruchteil der Zeit zu erstellen und aus der enormen Vielfalt der Eclipse PlugIns zu schöpfen um zusätzliche Funktionalität einzubinden.
 

ttplayer

Aktives Mitglied
OK, das hab ich verstanden, aber dann müsste wie gesagt jeder, der meine Anwendung nutzen will, Eclipse installieren:(
 

Wildcard

Top Contributor
Nein. Du hast immer noch die IDE im Kopf. Ein Eclipse RCP basiert auf Eclipse technologie, ist aber eine eigenständige Anwendung. Die Eclipse IDE ist nichts anderes als ein Eclipse RCP für Java Programmierung, ein Eclipse RCP kann aber auch ein EMail Client, oder von mir aus Minesweeper sein.
 

ttplayer

Aktives Mitglied
Also ich hab das jetzt so verstanden:
Eclipse RCP kann man sich ähnlich wie SWT herunterladen und man hat halt dann einfachere und abstraktere Tools als bei SWT und muss ein bisschen anders programmieren. Und außerdem basiert RCP auf SWT so wie SWT auf AWT basiert.

Dann wäre meine Frage:
1. Warum programmieren dann so viele mit SWT?
2. Wie groß wird die JAR-Datei dann, wenn RCP so umfangreich ist?
 

Wildcard

Top Contributor
Eclipse basiert auf einem modularen OSGi Framework (Equinox). In dieses Framework wird eine ganze Menge an PlugIns deployed (OSGi Bundles). Auf eclipse.org werden viele hundert davon entwickelt (wie zum Beispiel SWT) und ein Auszug aus diesen vielen hundert Plugins formen die Eclipse Java IDE wie du sie kennst. Lässt du allerdings einige davon weg, und fügst ein paar eigene hinzu, erhälst du eine komplett andere Anwendung. Diese basiert dann auf Eclipse Technologie (dem Framework + das Set an PlugIns das du einbinden möchtest), ist aber keine IDE wenn du das nicht möchtest. Das ist dann eine Eclipse RCP Applikation. Du kannst massiv von den Eclipse Technologien profitieren, da du eine erweiterbare, modulare Infrastruktur (OSGi) geschenkt bekommst und viele Eclipse PlugIns für eigene Zwecke verwenden kannst.
Ein einfaches Beispiel wäre zB das du bestimmte Teile, wie zum Beispiel den Project Explorer wiederwenden kannst und an deine Bedürfnisse anpassen kannst. Du bekommst Frameworks für alles, von Progress Monitoring, über mächtige Resource API, zu Team Integration für zB CVS. Du baust dir Quasi eine Anwendung aus fertigen Bausteinen und schreibst nur noch die Teile selbst, die es nicht bereits fertig gibt.
Eclipse RCP kann man sich ähnlich wie SWT herunterladen und man hat halt dann einfachere und abstraktere Tools als bei SWT und muss ein bisschen anders programmieren.
Die Eclipse IDE enthält bereits alles um eine RCP zu erstellen. Es ist AFAIR sogar eine Sample RCP im Download enthalten (ein einfacher EMail Client),
Und außerdem basiert RCP auf SWT so wie SWT auf AWT basiert.
RCP basiert nicht auf SWT, und SWT basiert nicht auf AWT.
RCP beschreibt eine Plattform. Meistens wird SWT als grafisches Toolkit verwendet, das ist jedoch keine Vorraussetzung.

1. Warum programmieren dann so viele mit SWT?
Ich würde mal behaupten das deutlich mehr Leute an Eclipse basierten Anwendungen arbeiten, als an Anwendungen die lediglich SWT als Toolkit verwenden.
2. Wie groß wird die JAR-Datei dann, wenn RCP so umfangreich ist?
Es hängt davon ab wieviele Module man in seiner Plattform ausliefert. Das absolute minimum für zB eine Anwendung die lediglich Equinox verwendet dürfte so bei 3MB liegen. Typische RCP Applikationen mit SWT als Toolkit und dem Rumpf der Eclipse UI fangen so bei 12-15MB an würde ich sagen.
 

ttplayer

Aktives Mitglied
Danke!

Ich kann also z.B. den Code-editor der Eclipse IDE in mein Programm einbauen und auch verändern und ich kann auch meine Eigenen Tools z.B. mit SWT schreiben und diese dann in anderen Projekten wiederverwenden.

ach: um den Code im Editor schreiben zu können, sieht mir die Sache ein bisschen zu komplex aus mit den gleich mal 10 java-Files, die ich in der Eclipse IDE bekomme, wenn ich ein RCP-Projekt mache... oder irre ich mich da?
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
Um nochmal zur Frage zurückzukommen:
Wenn ich class-files in die jar-Datei einbinde mit:
Pfad\zum\Projekt\*.class
dann liegen die Class-Files im JAR-Archiv ebenfalls in den Ordnern Pfad\zum\Projekt
Wie muss man das schreiben, damit die *.class-Files direkt im Archiv liegen?
Ich will nicht die ganze Zeit mit cd (change directory) arbeiten...

Und wie kriege ich das hin, dass das Programm die Icons, die es verwendet, im JAR-File sucht und nicht auf dem Computer?

PS: Ohne Icons funktionieren die Programme auch unter XP.:toll:
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
Wie man Icons einbindet, weiß ich leider immer noch nicht, aber ich hab jetzt einfach beim javac angegeben, dass er die Class-Dateien direkt zu meiner entpackten swt.jar legt und dann waren sie beim JAR erstellen gleich im -C Pfad mit drin:toll:
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben