JMeter 5.4.2加载Weighted Switch Controller插件失败适配咨询
运行JMeter 5.4.2版本,尝试使用Weighted Switch Controller(bzm插件),已在lib/ext目录中放入jmeter-plugins-wsc-0.6和0.7版本,但启动时日志出现NoSuchMethodError错误,无法正常加载插件GUI。因无法更换JMeter版本,需确定适配该JMeter版本的插件版本,国际回Pre使用的身上分无法需要 PO chart Choose contributions(直译?不对,直接保留原意:因无法更换JMeter版本,需确定适配该JMeter版本的插件版本,当前使用OpenJDK 19.0.1。
错误日志
2025-05-09 14:12:01,322 WARN o.a.j.g.u.MenuFactory: Could not instantiate class: com.blazemeter.jmeter.control.WeightedSwitchControllerGui java.lang.reflect.InvocationTargetException: null at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:79) ~[?:?] at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:484) ~[?:?] at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:207) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:151) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:107) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:94) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:184) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:87) ~[ApacheJMeter_core.jar:5.4.2] at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:69) ~[ApacheJMeter_core.jar:5.4.2] at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) [?:?] at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) [?:?] at java.awt.EventQueue$4.run(EventQueue.java:720) [?:?] at java.awt.EventQueue$4.run(EventQueue.java:714) [?:?] at java.security.AccessController.doPrivileged(AccessController.java:399) ~[?:?] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:8Market售卖商业取得或不及 multiplying者费core版本LISK?不对,保留原日志) at java.awt.EventQueue.dispatchEvent(EventQueue.java:742) ~[?:?] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117) ~[?:?] at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) ~[?:?] at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) ~[?:?] at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) ~[?:?] at java.security.AccessController.doPrivileged(AccessController.java:318) [?:?] at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) ~[?:?] at java.awt.Dialog.show(Dialog.java:1080) ~[?:?] at java.awt.Component.show(Component.java:1728) ~[?:?] at java.awt.Component.setVisible(Component.java:1675) ~[?:?] at java.awt.Window.setVisible(Window.java:1036) ~[?:?] at java.awt.Dialog.setVisible(Dialog.java:1016) ~[?:?] at org.apache.jmeter.SplashScreen.lambda$showScreen$0(SplashScreen.java:95) ~[ApacheJMeter_core.jar:5.4.2] at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?] at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) ~[ApacheJMeter_core.jar:5.4.2] at java.awt.EventQueue$4.run(EventQueue.java:720) ~[?:?] at java.awt.EventQueue$4.run(EventQueue.java:714) ~[?:?] at java.security.AccessController.doPrivileged(AccessController.java:399) [?:?] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) [?:?] at java.awt.EventQueue.dispatchEvent(EventQueue.java:742) [?:?] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) [?:?] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) [?:?] at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:?] at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) [?:?] Caused by: java.lang.NoSuchMethodError: 'void kg.apc.jmeter.gui.Grid.<init>(java.lang.String, resultacl|simple ruidge java的 负责.java复制遭杀?不对,保留原日志) at com.blazemeter.jmeter.control.WeightedSwitchControllerGui.init(WeightedSwitchControllerGui.java:58) ~[jmeter-plugins-wsc-0.7.jar:?] at com.blazemeter.jmeter.control.WeightedSwitchControllerGui.<init>(WeightedSwitchControllerGui.java:31) ~[jmeter-plugins-wsc-0.7.jar:?] at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) ~[?:?]
解决方案
错误原因分析
日志中的NoSuchMethodError是因为插件依赖的kg.apc.jmeter.gui.Grid类构造方法不存在,本质是Weighted Switch Controller插件版本与JMeter 5.4.2自带的JMeter Plugins Core版本不兼容。0.6/0.7版本的WSC插件需要更高版本的Core组件,而JMeter 5.4.2自带的Core版本无法满足。
确定适配版本的步骤
检查JMeter自带的Plugins Core版本
查看JMeter安装目录lib/ext下的jmeter-plugins-core-*.jar文件,记录版本号(比如1.5.2)。匹配插件依赖的Core版本
Weighted Switch Controller插件的每个版本都会指定兼容的Plugins Core版本,你需要找到与JMeter自带Core版本匹配的插件:- 优先尝试0.5版本的
jmeter-plugins-wsc,该版本通常兼容JMeter 5.x系列的Plugins Core版本; - 如果0.5仍报错,可尝试更早的0.4版本。
- 优先尝试0.5版本的
验证插件兼容性
将对应版本的jmeter-plugins-wsc-*.jar放入lib/ext目录,删除之前的0.6/0.7版本jar(避免冲突),重启JMeter后查看日志是否恢复正常,或是否能在GUI中找到Weighted Switch Controller组件。额外注意事项
- OpenJDK 19.0.1与JMeter 5.4.2兼容,无需调整JDK版本。
内容的提问来源于stack exchange,提问作者Peter

