DevFaqSystemOptionNotPersistedJa

レイヤから SystemOption を追加しましたが、変更が永続化されません。

SystemOption を正しく登録するには、 XML レイヤの Services/ 配下のどこかに *.settings ファイルを配置する必要があります。また通常はこれに加えて、ユーザがOptionsウィンドウを開いた際に表示されるよう、 UI/Services/ 内のどこかに .shadow を作成します。

時々 UI/Services/内に直接 *.settings ファイルを配置するケースが見られますが、この方法では正しく動作しません。 SharedClassObject.findObject は追加されたオプションのインスタンスを作成しますが、生成されるのはデフォルトのインスタンスのみです。というのも、デフォルトの、あるいはカスタマイズされたオプション Bean の検索は Services/ ディレクトリ内のみで行われるからです。オプションに関連付けられた *.settings ファイルの存在が findObject に通知されず、オプション設定が一時的な(メモリ上の)ものであると判断されるため、オプションの変更がディスクに書き込まれることはありません。この場合、あたかもコードからアクセスする直前に「オプション」ダイアログを開いて設定を行った場合に限り、変更が永続化されているように見える可能性があります。


詳しくは Services API をご確認ください。

なお、プロパティ変更は settr メソッド- 通常、 putProperty(PROPFOOBAR, newValue, true) の書式が使われます - を用いて行うようにしてください。また、プロパティ名は JavaBeans のイントロスペクション可能な名前にしてください。例えば setFooBar なら プロパティ名はfooBar となります。あわせて、 newValue.equals(oldValue) である場合、プロパティは変更されないということを覚えておいてください(これは java.beans.PropertyChangeSupport の標準の振る舞いです)。 - 複雑な構造を持つ値型を定義した際に、新規値オブジェクトを生成することなく構造の一部を更新しようとするとこのような現象が起こることがあります。このような場合は oldValue == newValue.となります。


Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo