2016-12-30 59 views
0

我正在開發Burp套件擴展。java中的類中的公共靜態字段

我有一個類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. 
    } 
} 

我有另一種解決方案,當我tryed做水木清華像JMenuItem的項目=新的JMenuItem(新AbstractAction( 「123」){ ...}導致它同

+0

U需要初始化靜態變量 – Athul

+0

我的意思是定義它 – Athul

+0

你不知道,但你有沒有搜索是什麼NullPointerException?這是你會遇到最多的例外。 – AxelH

回答

1

您需要需要在BurpExtender類初始化helperstdout對象。

由於這些是靜態字段,因此在聲明它們時或者在類中的靜態塊內部時,可以將它們初始化。

例如:

  1. 儘管聲明它們:
public static PrintWriter stdout = System.out; 
public static IExtensionHelpers helpers = new ExtensionHelperImpl();// something like this. 
  • 或靜態塊內
  • public static PrintWriter stdout; 
    public static IExtensionHelpers helpers; 
    
    static { 
        stdout = System.out; 
        helpers = new ExtensionHelperImpl();// something like this. 
    } 
    

    如果沒有這個初始化,stdouthelpers引用將指向null。當您嘗試在其他類中使用 BurpExtender.stdoutBurpExtender.helpers時,會導致NullPointerException。

    更新

    在你MyAction類聲明引用舉行IContextMenuInvocation invocation對象。有些事情是這樣的:

    private class MyAction extends AbstractAction{ 
        private IContextMenuInvocation invocation; 
    
        public MyAction(IContextMenuInvocation invocation){ 
         super("Name"); 
         this.invocation = invocation; 
        } 
    
    
        public void actionPerformed(ActionEvent e) { 
         //Here you can use BurpExtender.helpers and IContextMenuInvocation invocation also. 
         BurpExtender.helpers.doSomething(); 
         invocation.invoke();// for example.. 
        } 
    } 
    

    然後你的外部類中,改變createMenuItems方法是這樣的:

    public List<JMenuItem> createMenuItems(final IContextMenuInvocation invocation) { 
        List<JMenuItem> menuItemList = new ArrayList<JMenuItem>(); 
        JMenuItem item = new JMenuItem(new MyAction(invocation));// this is the change 
        menuItemList.add(item); 
        return menuItemList; 
    } 
    

    希望這有助於!

    +0

    如果一個不會使它靜態,有沒有辦法在另一個使用BurpExtension類的私人/公共領域?如果我讓MyAction內在? –

    +0

    是的,_non-static_內部類將* *有權訪問外部類中聲明的_non-static_私有和公共字段。 – anacron

    +0

    In(actionPerformed)我需要使用(IContextMenuInvocation調用)。是否有可能使用它和BurpExtender.helpers? –

    相關問題