自定义侦听器 - 无法获取对GUI实例

时间:2017-04-15 19:47:24

标签: java jmeter

我正在开发一个自定义网络分析插件,其中包括:

  • 从AbstractVisualizer派生的GUI类(最近将超类改为AbstractJMeterGuiComponent以摆脱文件面板)
  • 从ResultsCollector派生的测试元素类

我在test元素类中重写了一个testStarted()方法来进行一些初始化,然后启动一个单独的线程来完成剩下的工作。

我的问题是我需要在我的插件的GUI上显示一些信息,但是我无法获得对我的GUI对象的引用来使用它的方法。我需要在接收样本结果的事件上独立完成此操作,因此我不能使用方法add(最终的SampleResult res)。

在beginnig中,我在modifyTestElement方法中向测试元素类发送GUI对象引用:

@Override
    public void modifyTestElement(TestElement element) {
        configureTestElement(element);
        NetProbe el = (NetProbe) element;

        //Passing GUI handle to TestElement for later status reporting
        if (el.getGuiHandle() == null) {
            el.setGuiHandle(this);
        }            
    }

如果我将引用存储在test元素中的静态变量中,这非常有效。但是当我打算将新组件的多个实例添加到测试计划中时,我必须使变量非静态,以便对每个GUI类实例进行单独引用。这就是出现问题的地方。如果我这样做,我会得到NullPointerException。

我通过使用测试元素对象的文本解释进行了一些调查,我发现:

  • 当我在createTestElement方法中创建test元素时,它是一个实例
  • 当它传递给modifyTestElement时,GUI引用被发送到TE,它仍然是同一个实例
  • 当我尝试从测试元素调用GUI方法时,它是不同的(新的?)实例 - >因此,应该存储GUI引用的非静态变量是空的
  • 然后再次调用modifyTestElement时,它再次使用原始实例

有没有人可以解释一下这个新实例的创建地点和原因,以及如何从测试元素对象中获取对我的GUI类对象的引用?

提前致谢。

0 个答案:

没有答案