2011-06-29 62 views
0

我在netbeans网站(因服务器问题而脱机)上创建一个教程,以创建一个读取XML并在其上输出一些信息的操作。一切都很好,但行动不允许我在某些XML文件上调用它,并且我没有有用的资源来呼吁帮助解决这个问题。例如,当我运行程序时,它允许我在清单文件(甚至不是xml,并且相应地出错)上调用操作,但不在.xml文件上。以下代码可能是我从教程中更改的罪魁祸首。我想它会使“显示XML”消息始终处于启用状态,但它仍然在xml文件上被禁用。Netbeans平台操作困难

@ActionReferences({ 
    @ActionReference(path = "Editors/Popup", position = 1100) 
}) 

这里是我的SSCCE(原文如此):

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.versifit.udl.xml; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.io.IOException; 
import java.io.InputStream; 
import org.openide.awt.ActionID; 
import org.openide.awt.ActionReference; 
import org.openide.awt.ActionReferences; 
import org.openide.awt.ActionRegistration; 
import org.openide.cookies.EditorCookie; 
import org.openide.util.Exceptions; 
import org.openide.util.NbBundle; 
import org.openide.util.NbBundle.Messages; 
import org.openide.windows.IOProvider; 
import org.openide.windows.InputOutput; 
import org.openide.xml.XMLUtil; 
import org.w3c.dom.Document; 
import org.w3c.dom.NamedNodeMap; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

@ActionID(category = "Edit", 
id = "com.versifit.udl.xml.ShowXMLStructureAction") 
@ActionRegistration(displayName = "#CTL_ShowXMLStructureAction") 
@ActionReferences({ 
    @ActionReference(path = "Editors/Popup", position = 1100) 
}) 
@Messages("CTL_ShowXMLStructureAction=Show Xml Structure") 

public final class ShowXMLStructureAction implements ActionListener { 

private final EditorCookie context; 

public ShowXMLStructureAction(EditorCookie context) { 
    this.context = context; 
} 

public void actionPerformed(ActionEvent ev) { 
    EditorCookie editorCookie = context; 
    //Get the tab name from the Bundle.prop file: 
    String tabName = NbBundle.getMessage(ShowXMLStructureAction.class, "LBL_tabName"); 
    InputOutput io = IOProvider.getDefault().getIO(tabName, false); 
    io.select(); //"XML Structure" tab is selected 
    try { 
    //Get the InputStream from the EditorCookie: 
    InputStream is = ((org.openide.text.CloneableEditorSupport) editorCookie).getInputStream(); 
    //Use the NetBeans org.openide.xml.XMLUtil class to create a org.w3c.dom.Document: 
    //"XML Structure" tab is created in Output Window for writing the list of tags: 
    Document doc = XMLUtil.parse(new InputSource(is),true,true,null,null); 
    //Create a list of nodes, for all hte elements: 
    NodeList list = doc.getElementsByTagName("*"); 
    //Iterate through the list: 
    for (int i = 0; i < list.getLength(); i++) { 
     //For each node in the list, create a org.w3c.dom.Node: 
     org.w3c.dom.Node mainNode = list.item(i); 
     //Create a map for all the attributes of the org.w3c.dom.Node: 
     NamedNodeMap map = mainNode.getAttributes(); 
     //Get the name of the node: 
     String nodeName = mainNode.getNodeName(); 
     //Create a StringBuilder for the Attributes of the Node: 
     StringBuilder attrBuilder = new StringBuilder(); 
     //Iterate through the map of attributes: 
     for (int j = 0; j < map.getLength(); j++) { 
      //Each iteration, create a new Node: 
      org.w3c.dom.Node attrNode = map.item(j); 
      //Get the name of the current Attribute: 
      String attrName = attrNode.getNodeName(); 
      //Add the current Attribute to the StringBuilder: 
      attrBuilder.append("*").append(attrName).append(" "); 
     } 
     //Print the element and its attributes to the Output window: 
     io.getOut().println("ELEMENT: " + nodeName + 
       " --> ATTRIBUTES: " + attrBuilder.toString()); 
    } 
    //Close the InputStream: 
    is.close(); 
} catch (SAXException ex) { 
    Exceptions.printStackTrace(ex); 
} catch (IOException ex) { 
    Exceptions.printStackTrace(ex); 
} 
} 
} 

回答

1

这是你所需要的:

@ActionReferences({ @ActionReference(PATH = “编辑/文本/ XML /弹出” ,position = 1100) })