Am 26.02.2017 um 09:06 schrieb Felix Schumacher:
Am 25. Februar 2017 23:42:44 MEZ schrieb sebb <[email protected]>:
On 25 February 2017 at 14:25, Felix Schumacher
<[email protected]> wrote:
Am 25.02.2017 um 15:01 schrieb Philippe Mouawad:
Hi Graham,
It could be coming from a Sonar error I fixed in r1783482
@Override
public String getName() {
if (nameField != null) {
return nameField.getText();
}
return ""; // $NON-NLS-1$
}
Could you try it ?
I reverted the fix and added a sonar hint, to not nag us about this.
I doubt that this is the full solution.
If the nameField can be null here then it can perhaps be null in
setName.
The underlying cause of the issue needs to be found.
One problem I notice is that the NamePanel ctor calls setName() which
can be overridden - that can cause issues because the object won't be
fully constructed until the ctor completes.
This is why init() is private.
The setName() code either needs to be duplicated in init(), or it
could be put into a private method called by the ctor and the public
setName.
Your analysis is correct, that setName should not be used in the ctor as it
could be modified in subclasses.
I tried a variant first, where I inlined the functionality of setName into the
ctor.
That didn't help.
We could add a safe guard into setName just in case and for symmetry.
Btw, the stacktrace is:
java.lang.NullPointerException: null
at org.apache.jmeter.gui.NamePanel.getName(NamePanel.java:78)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at
com.sun.java.swing.plaf.gtk.GTKStyle.getInsets(GTKStyle.java:316)
~[?:1.8.0_121]
at
javax.swing.plaf.synth.SynthStyle.installDefaults(SynthStyle.java:913)
~[?:1.8.0_121]
at
javax.swing.plaf.synth.SynthLookAndFeel.updateStyle(SynthLookAndFeel.java:265)
~[?:1.8.0_121]
at
javax.swing.plaf.synth.SynthPanelUI.updateStyle(SynthPanelUI.java:117)
~[?:1.8.0_121]
at
javax.swing.plaf.synth.SynthPanelUI.installDefaults(SynthPanelUI.java:100)
~[?:1.8.0_121]
at
javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
~[?:1.8.0_121]
at
javax.swing.plaf.synth.SynthPanelUI.installUI(SynthPanelUI.java:62)
~[?:1.8.0_121]
at javax.swing.JComponent.setUI(JComponent.java:666) ~[?:1.8.0_121]
at javax.swing.JPanel.setUI(JPanel.java:153) ~[?:1.8.0_121]
at javax.swing.JPanel.updateUI(JPanel.java:126) ~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:86) ~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:109) ~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:117) ~[?:1.8.0_121]
at org.apache.jmeter.gui.NamePanel.<init>(NamePanel.java:44)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at
org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(AbstractJMeterGuiComponent.java:78)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at
org.apache.jmeter.control.gui.TestPlanGui.<init>(TestPlanGui.java:68)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at
org.apache.jmeter.gui.tree.JMeterTreeModel.<init>(JMeterTreeModel.java:49)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at org.apache.jmeter.JMeter.startGui(JMeter.java:366)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at org.apache.jmeter.JMeter.start(JMeter.java:519)
[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170226]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[?:1.8.0_121]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[?:1.8.0_121]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_121]
at org.apache.jmeter.NewDriver.main(NewDriver.java:256)
[ApacheJMeter.jar:3.2-SNAPSHOT.20170226]
So, if I understand it correctly. The superclass will get initialized
before ourselves and that ctor will call into the laf system, which
calls the getName method (which we have overridden). At that time (init
of ctor of super) our fields will not have initialized, which leads to
the NPE.
So, I think the problem lies in the gtk+ implementation of laf, which is
calling an overridable method in the ctor.
Regards,
Felix
Felix
Felix
Thanks
On Sat, Feb 25, 2017 at 2:42 PM, Graham Russell <[email protected]>
wrote:
Hi all
I just tried to run `ant run_gui` on the latest (github) trunk but
this results in an NPE - specifically when trying to create the
JMeterTreeModel.
Any ideas?
Thanks
Graham
The JMeter log is:
2017-02-25 13:26:50,223 INFO o.a.j.u.JMeterUtils: Setting Locale to
en_GB
2017-02-25 13:26:50,246 INFO o.a.j.JMeter: Loading user properties
from: /home/coding/jmeter/bin/user.properties
2017-02-25 13:26:50,247 INFO o.a.j.JMeter: Loading system
properties
from: /home/coding/jmeter/bin/system.properties
2017-02-25 13:26:50,317 INFO o.a.j.JMeter: Copyright (c) 1998-2017
The
Apache Software Foundation
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: Version
3.2-SNAPSHOT.20170225
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: java.version=1.8.0_121
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: java.vm.name=Java
HotSpot(TM) 64-Bit Server VM
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: os.name=Linux
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: os.arch=amd64
2017-02-25 13:26:50,318 INFO o.a.j.JMeter:
os.version=4.4.0-59-generic
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: file.encoding=UTF-8
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: Max memory
=1342177280
2017-02-25 13:26:50,318 INFO o.a.j.JMeter: Available Processors =4
2017-02-25 13:26:50,323 INFO o.a.j.JMeter: Default Locale=English
(United Kingdom)
2017-02-25 13:26:50,323 INFO o.a.j.JMeter: JMeter Locale=English
(United Kingdom)
2017-02-25 13:26:50,323 INFO o.a.j.JMeter:
JMeterHome=/home/coding/jmeter
2017-02-25 13:26:50,323 INFO o.a.j.JMeter: user.dir
=/home/coding/jmeter
2017-02-25 13:26:50,323 INFO o.a.j.JMeter: PWD
=/home/coding/jmeter
2017-02-25 13:26:50,324 INFO o.a.j.JMeter: IP: 127.0.1.1 Name:
EliteBook FullName: EliteBook
2017-02-25 13:26:50,607 INFO o.a.j.g.a.LookAndFeelCommand: Using
look
and feel: com.sun.java.swing.plaf.gtk.GTKLookAndFeel [GTK+, System]
2017-02-25 13:26:50,805 INFO o.a.j.JMeter: Loaded icon properties
from
org/apache/jmeter/images/icon.properties
2017-02-25 13:26:50,842 ERROR o.a.j.JMeter: An error occurred:
java.lang.NullPointerException: null
at
org.apache.jmeter.gui.NamePanel.getName(NamePanel.java:75)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at
com.sun.java.swing.plaf.gtk.GTKStyle.getInsets(GTKStyle.
java:316)
~[?:1.8.0_121]
at javax.swing.plaf.synth.SynthStyle.installDefaults(
SynthStyle.java:913)
~[?:1.8.0_121]
at javax.swing.plaf.synth.SynthLookAndFeel.updateStyle(
SynthLookAndFeel.java:265)
~[?:1.8.0_121]
at javax.swing.plaf.synth.SynthPanelUI.updateStyle(
SynthPanelUI.java:117)
~[?:1.8.0_121]
at javax.swing.plaf.synth.SynthPanelUI.installDefaults(
SynthPanelUI.java:100)
~[?:1.8.0_121]
at javax.swing.plaf.basic.BasicPanelUI.installUI(
BasicPanelUI.java:56)
~[?:1.8.0_121]
at javax.swing.plaf.synth.SynthPanelUI.installUI(
SynthPanelUI.java:62)
~[?:1.8.0_121]
at javax.swing.JComponent.setUI(JComponent.java:666)
~[?:1.8.0_121]
at javax.swing.JPanel.setUI(JPanel.java:153)
~[?:1.8.0_121]
at javax.swing.JPanel.updateUI(JPanel.java:126)
~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:86)
~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:109)
~[?:1.8.0_121]
at javax.swing.JPanel.<init>(JPanel.java:117)
~[?:1.8.0_121]
at
org.apache.jmeter.gui.NamePanel.<init>(NamePanel.java:44)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at
org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(
AbstractJMeterGuiComponent.java:78)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at org.apache.jmeter.control.gui.TestPlanGui.<init>(
TestPlanGui.java:68)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at org.apache.jmeter.gui.tree.JMeterTreeModel.<init>(
JMeterTreeModel.java:49)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at org.apache.jmeter.JMeter.startGui(JMeter.java:366)
~[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at org.apache.jmeter.JMeter.start(JMeter.java:519)
[ApacheJMeter_core.jar:3.2-SNAPSHOT.20170225]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
~[?:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:62)
~[?:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498)
~[?:1.8.0_121]
at org.apache.jmeter.NewDriver.main(NewDriver.java:256)
[ApacheJMeter.jar:3.2-SNAPSHOT.20170225]