WinFuture-Forum.de: [gelöst]netbenas + *.jar File Erzeugen Und Icon - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

[gelöst]netbenas + *.jar File Erzeugen Und Icon

#1 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 27. Juli 2009 - 18:31

Hi,

ich hab jetzt mein erstes "größeres" Projekt mit NetBeans fertig gestellt, leider schaffe ich nicht ein vernünftiges und lauffähiges *.jar-File zu erzeugen.
Ich google mir jetzt bestimmt schon 2 h lang die finger wund und finde einfach nichts passendes.

Wie kann ich ein lauffähiges *.jar-File meines Projekts erstellen, das dann auch auf anderen Rechnern läuft. Hier auf meinem iMac läuft es wunderbar, wenn ich es aber jetzt in einer Windows XP VM ausführen will, dann erhaölte ich folgende Fehlermeldung:
C:\Dokumente und Einstellungen\Fabi\Desktop>java -jar PasswordGenerator(3).jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/applicat
ion/SingleFrameApplication
		at java.lang.ClassLoader.defineClass1(Native Method)
		at java.lang.ClassLoader.defineClass(Unknown Source)
		at java.security.SecureClassLoader.defineClass(Unknown Source)
		at java.net.URLClassLoader.defineClass(Unknown Source)
		at java.net.URLClassLoader.access$000(Unknown Source)
		at java.net.URLClassLoader$1.run(Unknown Source)
		at java.security.AccessController.doPrivileged(Native Method)
		at java.net.URLClassLoader.findClass(Unknown Source)
		at java.lang.ClassLoader.loadClass(Unknown Source)
		at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
		at java.lang.ClassLoader.loadClass(Unknown Source)
		at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.application.SingleFram
eApplication
		at java.net.URLClassLoader$1.run(Unknown Source)
		at java.security.AccessController.doPrivileged(Native Method)
		at java.net.URLClassLoader.findClass(Unknown Source)
		at java.lang.ClassLoader.loadClass(Unknown Source)
		at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
		at java.lang.ClassLoader.loadClass(Unknown Source)
		at java.lang.ClassLoader.loadClassInternal(Unknown Source)
		... 12 more
Could not find the main class: passwordgenerator.PasswordGeneratorApp. Program w
ill exit.

Ich hab jetzt schon einige "Lösungsansätze" dazu gefunden, leider hat nichts funktioniert.

Im Netbeans Forum hab ich auch nichts gescheites gefunden.

Weiß jemand von euch, wie ich das anstellen kann?

Desweiteren würde ich dem *.jar-File gerne ein eigenes Icon verpassen, wie kann ich das anstellen? In NetBenas selbst, scheint es nicht zu gehen (kenn das von anderen IDE's, bei denen kann man per Menü ein Icon zuweisen!)...?!?

Vielen danke für eure Hilfe!

lg,
Fabi

Dieser Beitrag wurde von Fabi bearbeitet: 18. August 2009 - 15:56

0

Anzeige

#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 28. Juli 2009 - 07:24

Zitat

Desweiteren würde ich dem *.jar-File gerne ein eigenes Icon verpassen

Nein, das wird nicht funktionieren. Eine Jar-Datei ist keine ausführbare Datei, sondern lediglich ein Archiv. Bei Zip-, Doc- oder Txt-dateien kannst du ja auch kein eigenes Icon festlegen.

Zitat

kenn das von anderen IDE's, bei denen kann man per Menü ein Icon zuweisen!

Wenn du auf Visual Studio hinaus möchtest, in C#, VB.NET oder C++ erstellst du ja auch ausführbare Dateien.

Zitat

lauffähiges *.jar-File zu erzeugen

Da gibt es zwei Möglichkeiten.

1. Du packst alle benötigten libs in einen Ordner und referenzierst diese beim Starten mit der Option -cp bzw -classpath. http://java.sun.com/javase/6/docs/technote...ndows/java.html
Netbeans macht bspw genau das.

2. Du verwendest Tools wie jarjar oder One-Jar. Damit ist es möglich alle libs in eine Jar zu packen.
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#3 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 28. Juli 2009 - 17:39

Erstmal vielen dank!

Zitat

Da gibt es zwei Möglichkeiten.

1. Du packst alle benötigten libs in einen Ordner und referenzierst diese beim Starten mit der Option -cp bzw -classpath. http://java.sun.com/...ndows/java.html
Netbeans macht bspw genau das.

2. Du verwendest Tools wie jarjar oder One-Jar. Damit ist es möglich alle libs in eine Jar zu packen.


aber irgendwie krieg ich das nicht so richtig auf die Reihe :D !
Ich google jetzt wiklich schon seit weiteren 2 h und es klappt einfach nicht.

Für nen Schubs in die richtige Richtung wäre ich echt dankbar ;) !!

lg,
Fabi
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 29. Juli 2009 - 06:51

Wo hängst du denn konkret?
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#5 Mitglied ist offline   karl0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 379
  • Beigetreten: 25. März 06
  • Reputation: 4

geschrieben 31. Juli 2009 - 16:28

Warum so kompliziert?

Bei netbeans,
Rechtsklick auf das Projekt -> "Clean and Build"

Peng, hast du deine *.Jar

init:
deps-clean:
Deleting directory C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
build
Deleting directory C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
dist
clean:
init:
deps-jar:
Created dir: C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
build\classes
Compiling 2 source files to C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
build\classes
Copying 1 file to C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
build\classes
compile:
Created dir: C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
dist
Building jar: C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
dist\Programmieren2pr1.jar
Not copying the libraries.
To run this application from the command line without Ant, try:
java -jar "C:\Users\*\Documents\NetBeansProjects\Programmieren2pr1\
dist\Programmieren2pr1.jar"
jar:
BUILD SUCCESSFUL (total time: 2 seconds)


MfG Karl0
Du bist die Nr. 1 - BLUE!!

Eingefügtes Bild
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 31. Juli 2009 - 18:04

Zitat

Warum so kompliziert?

Weil du das Problem nicht verstanden hast.

Was ist mit den ganzen verwendeten Bibliotheken? Wenn du dein Programm auf einem anderen Rechner ausprobieren möchtest, reicht nicht dass du "Programmieren2pr1.jar" kopierst.
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#7 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 02. August 2009 - 12:05

@Karl0: Du hast das Problem echt nicht verstanden :wink:. Lies am besten den Thread nochmal ganz durch anstatt nur die Überschrift zu lesen !!!

@Witi:

Zitat

Was ist mit den ganzen verwendeten Bibliotheken?

Die liegen in dem Projektordner in dem Ordner lib, leider weiß ich nicht, wie ich die jetzt auch in das jar-File reinbekomme.
Was muss ich denn da anpassen? gibt es da keine Einstellungen in NetBeans oder ein config-datei die ich bearbeiten kann.
Es wäre echt schade, wenn ich jedesmal noch einen packen ordner mit dem programm mit ausliefern muss, damit es funktioniert!

Danke für die Hilfe bis jetzt.

lg,
Fabi
0

#8 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 06. August 2009 - 08:21

Meine zitierte Frage war an karl0 gerichtet.

Das ist bei jeder Software so (im Prinzip egal in welcher Sprache geschrieben): Verwendest du irgendwelche Bibliotheken müssen diese mitgeschleppt werden.

Wie erwähnt, hast du dir bspw mal jarjar angeschaut? Damit kannst du sogar das von Netbeans verwendete ant-script anpassen. Dann baut dir Netbeans direkt ein einzelnes Jar-File mit allen enthaltenen Bibliotheken.
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#9 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 06. August 2009 - 13:28

Zitat

Wie erwähnt, hast du dir bspw mal jarjar angeschaut? Damit kannst du sogar das von Netbeans verwendete ant-script anpassen. Dann baut dir Netbeans direkt ein einzelnes Jar-File mit allen enthaltenen Bibliotheken.

Hab mir jarjar angeschaut, aber nur kurz, muss das nach dem urlaub mal intensiv nachholen, obwohl ich jetzt schon sagen muss, dass ich die doku auf der seite persöhnlich etwas dürftig finde :D !

aber falls was net klappt, werd ich mich sicherlich nochmal melden, wenn ich genau sagen, was ich nicht verstanden habe ;)!

lg,
Fabi
0

#10 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 06. August 2009 - 14:12

In deinem Projektverzeichnis liegt eine build.xml. In das "post-jar" ant-target kannst du jarjar einbinden. Z.B:
	<target name="-post-jar">
		<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"  classpath="/home/witi/libs/jarjar.jar"/>
		<jarjar jarfile="dist/my-project-jarjar.jar" filesetmanifest="mergewithoutmain">
			<zipfileset src="dist/my-project.jar"/>
			<zipfileset src="dist/lib/commons-cli-1.1.jar"/>
			<zipfileset src="dist/lib/commons-codec.jar"/>
			<zipfileset src="dist/lib/commons-httpclient.jar"/>
			<zipfileset src="dist/lib/commons-logging.jar"/>
			<zipfileset src="dist/lib/nekohtml.jar"/>
			<zipfileset src="dist/lib/xercesImpl.jar"/>
		</jarjar>
	</target>

Das ist ein Codefragment aus einem meiner Projekte. Sollte eigentlich selbsterklärend sein. dist und dist/lib Verzeichnisse solltest du auch in deinem Projekt finden, und somit auch die entsprechenden libs. Anschließend erzeugt netbeans automatisch die Datei "my-project-jarjar.jar".
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#11 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 11. August 2009 - 07:50

Gerade zufällig einen aktuellen Bericht gefunden, der ziemlich deinem Problem beschreiben sollte: http://java.sun.com/developer/technicalArt...use/single_jar/
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

#12 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 16. August 2009 - 14:40

Beitrag anzeigenZitat (Witi: 11.08.2009, 08:50)

Gerade zufällig einen aktuellen Bericht gefunden, der ziemlich deinem Problem beschreiben sollte: http://java.sun.com/developer/technicalArt...use/single_jar/

Hey, vielen dank!
das sieht genau nach dem aus, wonach ich gesucht habe :P . sobald ich wieder am heimischen rechner bin, werd ich das sofort testen :)!

Wenn dann alles woweit läuft werd ich dir nochmal ne rückmeldung geben.

lg,
Fabi
0

#13 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.921
  • Beigetreten: 30. August 04
  • Reputation: 1

geschrieben 18. August 2009 - 15:56

@Witi: Also mit dem bearbeiten der build.xml, so wie in deinem Link beschrieben, hat alles wunderbar geklappt :) !

Vielen Dank!
Seite ist jetzt schon bei meinen Favoriten drin!

Link zum fertigen Projekt.

lg,
Fabi

Dieser Beitrag wurde von Fabi bearbeitet: 18. August 2009 - 16:03

0

#14 _lustiger_affe_

  • Gruppe: Gäste

geschrieben 18. August 2009 - 16:25

Ein paar Verbesserungsvorschläge...

1. Füg die Standard-Files hinzu, die es eigentlich bei jedem OSS-Projekt gibt bzw. geben sollte. Folglich also COPYRIGHT, LICENSE, TODO, AUTHORS, README, INSTALL, CHANGELOG, ...

2. Warum nur 8,12,63 Zeichen und nicht frei wählbar?

3. Wie wär's mit wählbarem Zeichensatz/-vorrat?

4. Wie wär's mit wählbarem Pre-/Suffix?

5. Eine Möglichkeit, um ähnliche Zeichen zu vermeiden, z.B. 0O oder Il|

6. Persönlich find ich das ziemlich nervig, dass die Settings nach jedem Klick auf "generieren" zurückgesetzt werden. Ergo, um zwei oder mehr Passwörter mit z.B. 8 Zeichen zu erstellen muss ich 8 Zeichen, generieren, 8 Zeichen, generieren, ... klicken - sehr unkonfortabel.

7. Falls du das irgendwann mal in z.B. eine Linux-Distri einbringen willst, solltest du auch andere Packformate anbieten, z.B. hab ich kein .zip-kompatibles Programm installiert und abgesehen davon auch ein sinnvolle Namensgebung bzgl. Versionsnummern einsetzen.

Zum Code sag ich jetzt mal nichts, ausser dass da noch einiges an Verbesserungspotential drinsteckt, aber das scheint ja eines deiner ersten Projekte zu sein.

Dieser Beitrag wurde von lustiger_affe bearbeitet: 18. August 2009 - 16:26

0

#15 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.796
  • Beigetreten: 13. Dezember 04
  • Reputation: 37

geschrieben 20. August 2009 - 08:28

Zitat

Zum Code sag ich jetzt mal nichts, ausser dass da noch einiges an Verbesserungspotential drinsteckt

Ich aber! :D

Vorne weg, Variablen immer klein schreiben und Klassennamen (wie pwdeight) immer groß. Hier findest du sämtliche Java-Code Conventions von Sun: http://java.sun.com/docs/codeconv/

Key.java
private int anzChar = 63;

Konstanten werden in Java als "static final" definiert, also
private static final int ANZ_CHAR = 63;


Wenn ich mir das char-Array - was du auch als Konstante definieren kannst - anschaue, wo sind die ganzen Sonderzeichen?

		public String Key;
		protected int AnzWerte;

Das ist sehr schlechter Stil und sollte immer vermieden werden. Attribute _immer_ als private deklarieren. Zugriffe steuerst du über Set- und Get-Methoden.

Zitat

Key = Key+String.valueOf(werteTwelve[AnzWerte]);

Wenn du viele Zeichenketten konkatenierst, solltest du + vermeiden. + erzeugst jedesmal einen neuen String. Für solche Operationen gibt es die Klasse StringBuilder, du die stattdessen verwenden solltest.

Wofür hast du die Datei main.java?

Du arbeitest mit Vererbung (zwei Klassen die von Key erben), nutzt sie aber überhaupt nicht. Die Methode generate ist beinahe immer komplett identisch. Dry!

In der Oberfläche sollte jeweils nur ein Radio-Button gleichzeitig aktiviert sein.

Wenn ich mir die Methode jButton1MouseClicked der Klasse PasswordGeneratorView anschaue, ziehen sich mir die Fußnägel ein. Dieses hässliche kaskadierende if-else Konstrukt kannst du viel einfacher gestalten und gleichzeitig Polymorphismus verwenden. Ungefähr so:

final Key k;

if(jRadioButton1.isSelected()) {
	k = PwdEight();
} else if(jRadioButton2.isSelected()) {
	k = PwdTwelve();
} else if(jRadioButton3.isSelected()) {
	k = Key();
} else {
	// error
	k = null;
}

if (k != null) {
	k.generate();
 // ...
}


Wie wäre es mit einer Fehlermeldung, wenn die Datei nicht erzeugt werden konnte? Stichwort: Schreibrechte.
witi@jabber.ccc.de 0xAAE321A2

50226 - Witis Blog
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0