【发布时间】:2016-12-30 08:54:56
【问题描述】:
我正在开发 Burp Suite 扩展。
我有一个 BurpExtender 类,它有公共静态字段。
public class BurpExtender implements IBurpExtender, IContextMenuFactory{
private IBurpExtenderCallbacks callbacks;
public static PrintWriter stdout;
public static IExtensionHelpers helpers;
...
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
this.callbacks = callbacks;
this.helpers = callbacks.getHelpers();
PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
callbacks.setExtensionName("REQUESTSENDER");
callbacks.registerContextMenuFactory(BurpExtender.this);
stdout.println("Registered");
}
public List<JMenuItem> createMenuItems(final IContextMenuInvocation invocation) {
List<JMenuItem> menuItemList = new ArrayList<JMenuItem>();
JMenuItem item = new JMenuItem(new MyAction());
menuItemList.add(item);
return menuItemList;
}
在这个文件中我有另一个类 MyAction:
private class MyAction extends AbstractAction{
public MyAction(){
super("Name");
}
public void actionPerformed(ActionEvent e) {
//Here i want to use BurpExtender.helpers, but i cant figure out, how to.
//BurpExtender.stdout doesnt work here. Dunno why, NullPoinerException.
}
}
我有另一个解决方案,当我尝试像 JMenuItem item = new JMenuItem(new AbstractAction("123") {...} 那样做时,结果是一样的
【问题讨论】:
-
你需要初始化静态变量
-
您不知道,但您是否搜索过 NullPointerException 是什么?这是您遇到最多的例外情况。
-
当然我在 BurpExtender 中初始化助手和标准输出
-
1 我没有看到任何初始化,因此如果您在构造函数中执行此操作,则需要确保在使用该操作之前构建一个实例。 2 一个 NPE 告诉你,你在标准输出中有一个
null -
简单,你的输出中有
"Registered"吗?如果没有,那么你永远不会初始化它。由于这是在 registerXXX 方法中完成的,因此可能不会这样做。如果您使用实例方法进行初始化,请始终检查静态实例的值(因为这可能永远不会发生)