在使用之间坚持我的状态

时间:2015-10-23 08:59:43

标签: java netbeans-platform

新手netbeans-platform

如何将我的状态从一次执行保存到下一次执行。

netbeans平台优雅地记住了我所有窗户的状态和位置。如何将我自己的一些数据添加到该状态?非常像Netbeans保存哪些项目是开放的,并在启动时重新打开它们以及它们的状态。

屁股建议here我在TopComponent添加了以下内容,但它不起作用。 getPersistenceType已被调用,但writeExternal n'或readExternal均未被调用。

@Override
public int getPersistenceType() {
  return TopComponent.PERSISTENCE_ALWAYS;
}

@Override
public void writeExternal(ObjectOutput oo) throws IOException {
  super.writeExternal(oo);
}

@Override
public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException {
  super.readExternal(oi);
}

评论here建议使用readPropertieswriteProperties,但这对我来说并不合适。我不想存储Properties,我想存储State

2 个答案:

答案 0 :(得分:0)

几年前,我在NetBeans平台应用程序中使用Swing应用程序框架的会话存储功能对此进行了博客:

http://puces-blog.blogspot.ch/2009/04/netbeans-platform-meets-swing.html

以下3个类应提供与NetBeans平台的集成:

只有在需要支持SwingX类(如JXTable)时才需要引用的XProperties和JXTable。

要在您自己的模块中使用此功能,您需要初始化ModuleInstall类中的上下文:

public class Installer extends ModuleInstall {  

   private static ModuleApplicationContext applicationContext;  

   @Override  
   public void restored() {  
       applicationContext = new ModuleApplicationContext(Modules.getModuleInfo(  
               Installer.class));  
   }  

   public static ModuleApplicationContext getApplicationContext() {  
       return applicationContext;  
   }  
}  

对于给定的contentPane,您可以使用以下方式存储GUI会话状态:

Installer.getApplicationContext().getSessionStorage().save(  
                getContentPanel(), SESSION_STORAGE_XML);  

并使用以下方法恢复状态:

Installer.getApplicationContext().getSessionStorage().  
                restore(getContentPanel(), SESSION_STORAGE_XML);  

注意:您需要设置相关组件的组件名称

您可以在此处找到完整示例:http://sourceforge.net/p/puces-samples/code/HEAD/tree/tags/sessionstate-1.0/

另请注意,Swing应用程序框架(JSR-296)的开发已被撤销。

有一个名为Better Swing Application Framework的分叉,但我还没有使用它。

答案 1 :(得分:0)

我也有一些问题,但最后我可以解决它。

使用@ TopComponent.Description注释您的topcomponent类,并在注释中设置正确的持久性类型。 你的topcomponent类必须是可序列化的,所以, topcompent中的每个字段都必须是可序列化的或瞬态的。 您可以使用readExtern / writeExternal实现自定义序列化,但这不是必需的,您可以删除它们。 如果它仍然不起作用,请在关闭netbeans应用程序后检查日志,您将看到平台无法序列化您的topComponent的原因。