我正在尝试为 Intellij IDEA 开发一个插件,我正在使用 SDK 129.451。
我遇到的问题是我无法保留用户数据,例如他可以在插件中输入的一些列表项,并在 IDE 重新启动后恢复数据。
我正在使用 PersistentStateComponent 来持久化数据,该getState()
方法似乎被调用但该loadState()
方法没有。
这是一个扩展 PersistentStateComponent 的示例类:
@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;
}
}
我也在 plugin.xml 中添加了这个类:
<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>
而且我还有一个工具窗口类:
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+");
}
});
}
好的,如果我关闭应用程序或最小化它,getState 方法会按我的预期被调用.. 但是当我打开应用程序时,loadState 方法不会被调用.. 有人可以帮我解决这个问题吗?
我已经读过这个,但它似乎对我没有多大帮助。我也想使用PersistentStateComponent
,因为我想保存比简单字符串更复杂的对象。
先感谢您!