2017-06-07 19 views
-1

変数を変更できるかどうかを例外としてclass1に通知します。例外をスローするためにpropertyChangeを配置しようとしましたが、このメソッドではできません。 class1にどうすれば通知できますか?Java beanで例外をスローすることができます

class1に - >

public void setProperty(int var) { 
    if(var > 0){ 
    propertySupport.firePropertyChange("var", this.var,var); 
    this.var = var; 
    }else{ 
     System.out.println("bla bla"); 
    } 
} 

//methods 
public void addPropertyChangeListener(PropertyChangeListener listener) { 
    propertySupport.addPropertyChangeListener(listener); 
} 

public void removePropertyChangeListener(PropertyChangeListener listener) { 
    propertySupport.removePropertyChangeListener(listener); 
} 

クラス2 - >

@Override 
public void propertyChange(PropertyChangeEvent evt){ 
    if(evt.getNewValue().equals("var")) 
     //TODO 
    }else{ 
     //throw exception to not change var in class1 
    } 
+0

'if(evt.getNewValue()==" var ")' ???いいえ、文字列と '=='を比較しないでください。これは、あなたがやりたいことではない* references *を比較するためです。代わりに '.equals(...)'メソッドを使用してください。 –

+0

プロパティを変更して例外を渡すべきではありません。これは状態の変化を通知するためのもので、その他のものはありません。リスニングクラスが国家の変化にどのように反応するかは、それに依存します。 –

+0

それで、class1にvarを変更しないように通知する方法は? – Liru

答えて

1

あなたはVetoableChangeListenerを使用する必要があります。

JavaDoc参照してください:Beanが "制約" プロパティを変更するたびにA VetoableChangeイベントがトリガーされますのEventListener

を拡張VetoableChangeListener

パブリックインターフェイス

を。 VetoableChangeListenerを のソースBeanに登録して、制約付きのプロパティ の更新を通知することができます。

無効vetoableChange(のPropertyChangeEventのEVT) は、制約プロパティが変更されたときに呼び出されますはPropertyVetoException

をスローします。

パラメータ: evt - 変更されたイベントソースとプロパティを示すPropertyChangeEventオブジェクトです。例外: PropertyVetoException - プロパティの変更がロールバックされることを受信者が望む場合

0

FireProperty私が使用したい変数または属性を変更するように指示します。もしその値が変更されたことクラス2に通知するために、同じ「のsetProperty」方法で変数を変更するか否かを検証する必要があり

Class1の

public void setProperty(int var) { 

if(this.var != var && var > 0){ 
    propertySupport.firePropertyChange("var", this.var,var); 
    this.var = var; 
}else{ 
    System.out.println("bla bla"); 
} 

}

クラス2

@Override 
public void propertyChange(PropertyChangeEvent evt){ 
if(evt.getPropertyName().equals("var")){ 

    //I do something with this new variable 
    System.out.print(evt.getNewValue()); 
}else{ 
    //throw exception to not change var in class1 
} 
関連する問題