Ich versuche ein Plugin für Intellij IDEA zu entwickeln, ich arbeite mit SDK 129.451.Intellij IDEA Plugin - PersistentStateComponent loadState nicht aufgerufen
Das Problem, das ich habe ist, dass ich nicht die Benutzerdaten wie einige Listenelemente er Eingabe der Daten in das Plugin und haben zurück, nachdem die IDE Neustarts bestehen bleiben kann ..
ich PersistentStateComponent bin mit der fortbestehen Daten, scheint die getState()
Methode aufgerufen werden, aber die loadState()
Methode nicht. Hier
ist eine Beispielklasse, die PersistentStateComponent erweitert:
@State(name = "Test", storages = {@Storage(file = StoragePathMacros.APP_CONFIG+"/other.xml"
)})
public class Test implements PersistentStateComponent<Element> {
String ceva;
public Test() {
ceva = "sad";
System.out.println("constr");
}
public String getCeva() {
return ceva;
}
public void setCeva(String ceva) {
this.ceva = ceva;
}
public void loadState(Element state) {
System.out.println("cstate load");
ceva = (String) state.getContent().get(0);
}
public Element getState() {
System.out.println("cstate retu");
Element configurationsElement = new Element("testtt");
configurationsElement.addContent(ceva);
return configurationsElement;
}
}
Auch ich diese Klasse in plugin.xml hier hinzugefügt:
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="ro.catalin.prata.testflightuploader.controller.Test"/>
<!-- Add your extensions here -->
<toolWindow id="TF Uploader" secondary="true" icon="/general/add.png" anchor="right"
factoryClass="ro.catalin.prata.testflightuploader.view.TFUploader">
</toolWindow>
</extensions>
Und ich habe auch ein Werkzeugfenster Klasse:
public class TFUploader implements ToolWindowFactory {
private JButton buttonAction;
private ToolWindow myToolWindow;
final Test test = ServiceManager.getService(Test.class);
public TFUploader() {
// I assume it should print the saved string but it doesn't
System.out.println(test.getCeva());
buttonAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// if I click a button I am setting some new value to the string I want to save
test.setCeva(test.getCeva() + "-dddddd+");
}
});
}
Ok, wenn ich die App schließe oder sie minimiere, wird die getState Methode wie erwartet aufgerufen .. aber wenn ich die App öffne, wird die loadState Methode nicht aufgerufen .. kann mir jemand helfen, wie ich das lösen kann Dies?
Ich lese bereits this, aber es scheint mir nicht zu viel zu helfen. Ich möchte auch PersistentStateComponent
verwenden, wie ich Objekte komplexer als ein einfacher String speichern möchte.
Vielen Dank im Voraus!
Ich habe Antwort auf ähnliche Frage hier hinzugefügt: http://StackOverflow.com/a/41201199/532541 Kurz gesagt, dies ist wahrscheinlich aufgrund der Eintragung Ihrer Komponente in –