Привязать свойства компонента SCA на панели управления сигналами

Я пытаюсь создать панель управления сигналами, чтобы изменить свойства ее компонентов. Я попытался применить пример из документации Redhawk для панели управления компонентами, но по какой-то причине я получаю исключение java.lang.NullPointerException при запуске плагина. Ошибка возникает, когда я пытаюсь привязать текстовое поле к свойству компонента, точная строка, где произошла ошибка, находится в комментариях к коду (в самом низу).

public class TestControlPanel extends AbstractScaContentEditor<ScaWaveform> {
    private ScaWaveform waveform;
    private ScaComponent myComponent;
    private Text propertyValueField;
    private EMFDataBindingContext context;

    /**
    * {@inheritDoc}
    */
    @Override
    public void createPartControl(final Composite main) {
            main.setLayout(new GridLayout(2, false));
            Group controlGroup = new Group(main, SWT.SHADOW_ETCHED_OUT);
            controlGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
            controlGroup.setText("Controls");
            createControlGroup(controlGroup);
    }

    private void createControlGroup(Composite parent) {
        parent.setLayout(new GridLayout(2, false));

        EObject input = getInput();

        if (input instanceof ScaWaveform) {
            // make local copy of waveform
            waveform = (ScaWaveform) input;
            try {
                waveform.refresh(null, RefreshDepth.FULL);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       

            label = new Label(parent,SWT.None);
            label.setText("Property Value:");
            propertyValueField = new Text(parent, SWT.BORDER | SWT.FILL);
            myComponent = waveform.getScaComponent("myComponent_1");
            if(myComponent != null)
            {                   
                IObservableValue observable = SCAObservables.observeSimpleProperty(myComponent, "propertyId");
                IObservableValue targetObservable = WidgetProperties.text(SWT.Modify).observeDelayed(5000,propertyValueField);
                if(observable != null && targetObservable != null)
                {
                    // ***** THE BELOW LINE CAUSES A java.lang.NullPointerException ERROR *****
                    context.bindValue(targetObservable, observable);
                    // ***** THE ABOVE LINE CAUSES A java.lang.NullPointerException ERROR *****

                }
            }           
        }

    }

Мое первоначальное предположение о причине этой ошибки заключалось в том, что одна из переменных IObservableValue (например, targetObservable или observable) была нулевой, поэтому я проверяю, чтобы значения не были нулевыми, прежде чем привязывать их. Однако это не решило проблему, и я все еще получаю ту же ошибку.


person coder    schedule 27.11.2013    source источник


Ответы (2)


Из кода, который я вижу, кажется, что ваша переменная поля «контекст» никогда не была инициализирована.

Просто вызовите конструктор без аргументов: context = new EMFDataBindingContext();

person Erik Englund    schedule 02.12.2013

Похоже, переменная контекста имеет значение null. Я вижу, что вы определяете «контекст» в верхней части класса, но я не видел, где он был установлен.

person JONATHAN LUELLEN    schedule 27.11.2013