Java-Archiv [JAR]

Fragen zu allen anderen Programmiersprachen.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Java-Archiv [JAR]

Beitrag von Angelo »

Hallo,
hab' mal wieder ein kleines Java-Problem. Deswegen habe ich mir sehr viele Posts in den Java-Foren angeschaut, aber ich blicke es einfach nicht, was dort erklärt wird. Vielleicht kann mir ein PBler helfen.
Also, ich habe ein kleines GUI geschrieben, was aus zwei Klassen besteht:

Code: Alles auswählen

import javax.swing.*;
import java.awt.*;
public class Gui {
	public static void main(String[] args) {
		MeinPanel my_panel = new MeinPanel();
		JFrame my_frame = new JFrame();
		my_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		my_frame.add(BorderLayout.CENTER, my_panel);
		my_frame.setSize(300,300);
		my_frame.setVisible(true);
	}
}
class MeinPanel extends JPanel {
	public void paintComponent(Graphics g) {
		Image my_image = new ImageIcon("fragezeichen.jpg").getImage();
		g.drawImage(my_image, 40, 40, this);
	}
}
Das Ganze kompiliere ich in den classes-Ordner. Und wenn ich in diesen Ordner noch die Bilddatei fragezeichen.jpg reinpacke, sehe ich auch was, wenn ich Gui.class ausführe.

Jetzt will ich das Ganze aber in ein Java-Archiv packen. Also habe ich in den classes-Ordner die Datei manifest.txt reingelegt mit folgendem Inhalt: Main-Class: Gui (plus einem "Return", wie in den Foren empfohlen wird). Ich erstelle dann das JAR mit:

Code: Alles auswählen

jar -cvmf manifest.txt Gui.jar *.class fragezeichen.jpg
Die JAR-Datei "Gui.jar" ist jetzt so groß, dass das "Fragezeichen" drin sein muss. Aber wenn ich die JAR-Datei in ein anderes Verzeichnis packe, also in ein Verzeichnis, wo die Bilddatei "fragezeichen.jpg" nicht existiert, wird beim Ausführen von Gui.jar nur der Bildrahmen ohne das Fragezeichen angezeigt. Ich vermute, dass ich noch etwas im Quellcode ergänzen muss ..... Aber was???
PB 5.50; Win 7
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Java-Archiv [JAR]

Beitrag von DarkDragon »

Auf JAR Innereien greift man durch getClass().getResourceAsStream("fragezeichen.jpg") zu. Sie sind also eine Ressource.

Noch ein Tipp: JAR ist ein ZIP archiv. Wenn du die Datei von "blabla.jar" zu "blabla.zip" umbenennst kannst du sie sogar entpacken zur Kontrolle.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Java-Archiv [JAR]

Beitrag von Angelo »

@DarkDragon, vielen Dank für Deine Antwort. Ist es egal, an welche Stellle in meiner Quellcode-Datei ich diese getClass()-Anweisung schreibe?
PB 5.50; Win 7
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Java-Archiv [JAR]

Beitrag von DarkDragon »

Angelo hat geschrieben:@DarkDragon, vielen Dank für Deine Antwort. Ist es egal, an welche Stellle in meiner Quellcode-Datei ich diese getClass()-Anweisung schreibe?
Ja, getClass() ist in jedem Java Object drin.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Java-Archiv [JAR]

Beitrag von Angelo »

Die Zeile

Code: Alles auswählen

getClass().getResourceAsStream("fragezeichen.jpg");
verursacht leider folgende Fehlermeldung: invalid method declaration; return type required
PB 5.50; Win 7
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Java-Archiv [JAR]

Beitrag von DarkDragon »

Angelo hat geschrieben:Die Zeile

Code: Alles auswählen

getClass().getResourceAsStream("fragezeichen.jpg");
verursacht leider folgende Fehlermeldung: invalid method declaration; return type required
Äh also innerhalb einer Methode muss sie natürlich stehen. Ich dachte das wäre klar :lol: .

So ungefähr in deinem Code:

Code: Alles auswählen

import javax.swing.*;
import java.awt.*;
public class Gui {
   public static void main(String[] args) {
      MeinPanel my_panel = new MeinPanel();
      JFrame my_frame = new JFrame();
      my_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      my_frame.add(BorderLayout.CENTER, my_panel);
      my_frame.setSize(300,300);
      my_frame.setVisible(true);
   }
}
class MeinPanel extends JPanel {
   public void paintComponent(Graphics g) {
      Image my_image = new ImageIcon(getClass().getResourceAsStream("fragezeichen.jpg")).getImage();
      g.drawImage(my_image, 40, 40, this);
   }
}
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Java-Archiv [JAR]

Beitrag von Angelo »

Ich hab das mal so ausprobiert, wie Du es gemacht hast. Dann bekomme ich eine Fehlermeldung a la: cannot find symbol symbol: method getResourceAsStream ....
Kann es sein, dass ich noch ein Java-Paket importieren muss? Ich hab es mal mit javax.imageio.* probiert - aber leider kein Erfolg.
PB 5.50; Win 7
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Java-Archiv [JAR]

Beitrag von DarkDragon »

Angelo hat geschrieben:Ich hab das mal so ausprobiert, wie Du es gemacht hast. Dann bekomme ich eine Fehlermeldung a la: cannot find symbol symbol: method getResourceAsStream ....
Kann es sein, dass ich noch ein Java-Paket importieren muss? Ich hab es mal mit javax.imageio.* probiert - aber leider kein Erfolg.
Nein, aber statt getResourceAsStream solltest du womöglich getResource verwenden, wegen den Parametern im Konstruktor von ImageIcon. So läuft es dann auch bei mir.

Nebenbei solltest du vllt. Eclipse oder Netbeans verwenden, weil die dir direkt Vorschläge unterbreiten können was du falsch machst. Das Importieren mach ich schon gar nicht mehr von Hand.

Hier ist noch ein Link:
http://docs.oracle.com/javase/tutorial/ ... /icon.html
Zuletzt geändert von DarkDragon am 15.02.2012 15:46, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Java-Archiv [JAR]

Beitrag von Angelo »

DarkDragon: Super! Mit getResource() funktioniert es. Vielen Dank auch für den Link!

Ich werde demnächst ganz sicher mit Eclipse arbeiten. Aber ich arbeite im Moment noch "Java von Kopf bis Fuß" durch und da wird empfohlen, erst mal nur einen Text-Editor zu verwenden. Jetzt bin ich wieder einen Schritt weiter. Noch mal herzlichen Dank! :D
PB 5.50; Win 7
Antworten