Java Programm soll Datei in eigene jar schreiben

NichtSchlau

Mitglied
Das Programm, welches ich gerade schreibe, soll sich sich Einstellungen des Nutzers merken.

Am praktischsten wäre es, wenn es die Einstellungen sich direkt in die executable Jar, von der das Programm auch gestartet wird, als Datei schriebe.
Das sich also im Archiv nicht nur die Klassen befinden sondern auch Konfigurationsdateien.

(Dadurch wäre es immer nur ein Archiv, das praktisch, portabel wäre)

Ist das möglich?


MfG
 
Nein. Du kannst nicht in das gerade ausgeführte Jar-File schreiben.
Um Einstellungen auf dem System zu speichern nutzt man am besten Properties-Files oder den Java Preference Store.
 
Ich glaub' kaum. Denn während das Archiv ausgeführt wird ist es sicher vom Dateisystem zum Lesen geöffnet und kann deswegen nicht erneut zum Schreiben geöffnet werden.
Ausserdem ist es auch nicht sehr zu empfehlen während seiner Ausführung das Archiv mit der gesammten Anwendung zu verändern denn wenn dabei was schief geht ist die Anwendung dahin. Allgemeine Practice ist es im Archiv Standardeinstellungen zu platzieren, die geladen werden wenn im Userverzeichnis keine individuelle Einstellungsdatei gefunden wurde.
 
Vielen Dank euch beiden.

Preference Store.



So werde ich es mal machen.


Ich hätte noch eine Frage wegen (J)MenuBar, die es nicht wert ist extra ein neues Thema zu eröffnen.

Ist es nach neustem standard jedem MenuItem eines Menus einer MenuBar, seinen eigenen ActionListener zu geben?
Das ergibt ernorm viel Code, weswegen ich es mit einem ActionListener gemacht habe, der switch hat und damit die entsprechenden Aktionen durchführt.

Oder gibt es einen besseren Weg?

MfG
 
Zuletzt bearbeitet:
Ich glaub' ich würd's auch nur mit einem ActionListener machen jedoch nicht unbedingt mit switch. Ich würde die Switchanweisung hübsch in if, else if und else Blöcke auscoden.
 
Zuletzt bearbeitet von einem Moderator:
Ich glaub' ich würd's auch nur mit einem ActionListeber machen jedoch nicht unbedingt mit switch. Ich würde die Switchanweisung hübsch in if, else if und else Blöcke auscoden.

Und wie machst du es dann?

Gibt es sowas wie "alleElementedesDatenTyps(JMenuItem)".addActionlistener(InstanzmeinesActionListeners)



Immomment mache ich es via

Java:
EinJMenuItem.addActionListener(MeinAcc);
ZweitesJMenuITem.addActionListener(MeinAcc);
DrittesJMenuITem.addActionListener(MeinAcc);


Das kommt aber auf enorm viel Code, den ich gerne vermeiden würde.



MfG
 
Ja nee... das mach' ich auch so. Geht ja auch nicht anders. Ich dachte du redest von der actionPerformed-Methode... naja der Mensch denkt, Gott lenkt... der Mensch dachte, Gott lachte...
Vllt. gibt es aber noch einen Weg über 'ne Collection, indem man alle Items, Buttons usw. in einer solchen hält und dann, während man darüber iteriert die ALs dranhängt. Alledings wird der Code dadurch auch nicht viel kürzer, weil man schlicht [c]item.addActionListener()[/c] durch [c]<Collection> items.add(item)[/c] ersetzt.
 
Verwende direkt Actions anstatt MenuItems:
JMenu (Java Platform SE 6)

Ok, die Vorteile habe ich beim durchlesen kapiert, aber die Anwendung nicht so wirklich.

Soweit wie ich die Texte verstanden habe, muss ich daher dann für jedes einzelne MenuItem noch seine eigene Klasse erstellen?

Java:
public MenüObjekt1 extends JMenuItem implements Action
{
    public Object getValue(String key) {
        //das was für MenüObjekt1 ist
    }

    public void putValue(String key, Object value) {
         //das was für MenüObjekt1 ist
    }

    public void actionPerformed(ActionEvent e) {
         //das was für MenüObjekt1 ist
    }
}

Will heißen, wenn ich 20 JMenuItems habe, muss ich mir 20 Klassen erstellen die Action implementieren um da die entsprechenden anweißungen rein zu schreiben?


Oder wie mache ich das am kürzesten sinnvoll mit Action

Ich kapier das Anwenden grad gar nicht, hab mir Action (Java Platform SE 6) komplett durchgelesen..

Kurzes beispeil von nem menü mit Actions, das die Vorzüge von Action nutzt, wäre toll

(hab keines mit Action bei Google gefunden)

Edit: Mir ist Action zu komplex. SUN schreibt extra das es auch lahmer macht, drum nehme ich lieber nen normalen Listener, trotzdem Danke.

MfG
 
Zuletzt bearbeitet:
Nimm die AbstractAction, dort sind die ganzen Methoden schon implementiert. Actions haben den Vorteil das sie wiederverwendbar sind. Du definierst die Action ein mal und kannst sie an mehreren Stellen verwenden. Du kannst natürlich auch anonyme innere Klassen dafür verwenden, das relativiert den Vorteil von Actions allerdings erheblich.
 
Nimm die AbstractAction, dort sind die ganzen Methoden schon implementiert. Actions haben den Vorteil das sie wiederverwendbar sind. Du definierst die Action ein mal und kannst sie an mehreren Stellen verwenden. Du kannst natürlich auch anonyme innere Klassen dafür verwenden, das relativiert den Vorteil von Actions allerdings erheblich.

Bedeutet aber trotzdem, dass ich für jeden einzelnes MenüObjekt eine Klasse von dem Abstract ActionListener ableiten muss??

Dazu hätte ich auch gleich noch ne Frage.

Werden beim Ausführen eines Javaprogrammes, alle Klassen in den Arbeitsspeicher geladen, oder liest das JRE wenn es eine Instanz erstellen soll jedes mal die Klasse auf der Festplatte nach?

MfG
 
Pro Classloader wird eine Klasse nur einmal geladen und zwar genau dann wenn sie zum ersten mal verwendet wird. Und keinesfalls solltest du aus falsch verstandener Optimierungswut versuchten möglichst wenige Klassen zu schreiben.
 
Pro Classloader wird eine Klasse nur einmal geladen und zwar genau dann wenn sie zum ersten mal verwendet wird. Und keinesfalls solltest du aus falsch verstandener Optimierungswut versuchten möglichst wenige Klassen zu schreiben.

NichtSchlau hat gesagt.:
Bedeutet aber trotzdem, dass ich für jeden einzelnes MenüObjekt eine Klasse von dem Abstract ActionListener ableiten muss??

Ähm bin ich zu doof oder habe ich dazu jetzt die Antwort übersehen?

Ich verstehe nicht wie ich Action anwenden soll.


MfG
 
Ob nun Action, AbstractAction, oder ActionListener. Eine Klasse brauchst du immer. Ob du nun n Klassen brauchst, oder eine instanz einer Klasse die viele Actions handelt, oder n Instanzen einer Klasse die jeweils eine Action handlen liegt bei dir.
 

Zurück
Oben