1

したがって、基本的には、ビューにインターフェイスを実装し、ビューをカスタム イベントのソースとして渡します。3 つの「instanceof」呼び出しのいずれかで、false が返されます。

意見:

public class NamedOffensiveStatsView extends BagVectorPanel implements INamedOffensiveStatsView {

Event.toString():

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append(this.getSource().getClass() + ": ");

e.toString() は以下を出力します:

class pl.drag0nius.diablo3.DPSCalc.NamedOffensiveStats.NamedOffensiveStatsView$2

false を返す instanceof:

@Override
public void eventFired(Event e) {
    logger.debug("eventFired: " + e.toString());
    if (e.getSource() instanceof INamedOffensiveStatsView) {

また、ビューからそのインターフェイスにキャストできません。

答え:

私の友人の助けを借りて、問題を発見しました。

イベントを呼び出すコード (ビューの initComponents() 内):

    jComboBox.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (comboBoxReady) {
                logger.debug("actionPerformed");
                listener.eventFired(new Event(this, "selection", jComboBox.getSelectedIndex()));
            }
        }
    });

あるべき姿:

    jComboBox.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (comboBoxReady) {
                logger.debug("actionPerformed");
                listener.eventFired(new Event(NamedOffensiveStatsView.this, "selection", jComboBox.getSelectedIndex()));
            }
        }
    });

「これ」は、ビューではなく、ネストされたクラスを参照していました。

4

1 に答える 1

7

クラス名の$2最後にあるは、ソースがの匿名の内部クラスであるように見えることを示しますNamedOffensiveStatsView。したがって、それはのインスタンスではありませんNamedOffensiveStatsView

于 2012-06-30T15:58:10.410 に答える