无法在NetBeans 8.0平台上的Topcomponent中使用Worldwind组件

时间:2014-06-12 21:28:29

标签: java exception netbeans jogl worldwind

我在NetBeans 8.0平台应用程序中创建了一个TopComponent。我想在它上面显示画布,但是当调用代码来引出一个worldwind组件并抛出异常时:

  

"发生了java.lang.IllegalStateException异常。单击显示   详细信息或查看位于您的messages.log文件   C:\ Users \用户abradford \桌面\的NetBeans   Projects \ MTAET \ MTAET \ build \ testuserdir \ var \ log文件夹。"

     

java.lang.IllegalStateException:无法找到TopComponent   preferredID EarthTopComponent,有关更多详细信息,请参阅IDE日志。

为此,TopComponent依赖于WorldWind.jar文件和Jogl文件。而WorldWind.jar文件仅依赖于Jogl文件。我要问的是,是否有人可以了解为什么worldwind组件不能与TopComponent一起使用。如果有人已经有一段已经工作过的代码,可以将其连接起来或者将其解决,那也是很棒的。自从我编写了Java之后已经有一段时间了,我可能已经开始有点强大了,所以请原谅我,如果答案是显而易见的。

以下是我使用的代码: V这是TopComponent V

import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;

@TopComponent.Description(
        preferredID = "EarthTopComponent",
        persistenceType = TopComponent.PERSISTENCE_ALWAYS
)

@TopComponent.Registration(
        mode = "editor",
        openAtStartup = true
)

@ActionID(
        category = "Window",
        id = "EarthTopComponent"
)

@ActionReference(
        path = "Menu/Window"
)

@TopComponent.OpenActionRegistration(
        displayName = "Earth",
        preferredID = "EarthTopComponent"
)

@NbBundle.Messages({"CTL_EarthViewer=Earth View",
    "HINT_EarthViewer=This is the Earth View"
})

public class EarthTopComponent extends TopComponent {

    public EarthTopComponent() {
        setName(Bundle.CTL_EarthViewer());
        setToolTipText(Bundle.HINT_EarthViewer());
        GUIWorldWind gui = new GUIWorldWind();
        add(gui.getFrame());
    }
}


_________________________________________________

V This is the Canvas Class V

    package Earth;

    //Basic Java Imports
    import javax.swing.*;
    import java.awt.*;
    //import java.util.ArrayList;

    //imports for layers
    import gov.nasa.worldwind.layers.*;
    import gov.nasa.worldwind.layers.Earth.*;

    //Imports for Geometry
    //import gov.nasa.worldwind.render.*;
    //import gov.nasa.worldwind.geom.Position;
    //import gov.nasa.worldwind.layers.RenderableLayer;
    //imports for world wind libraries
    import gov.nasa.worldwind.*;
    import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
    import gov.nasa.worldwind.avlist.AVKey;

    public class CanvasPanel extends JPanel
    {

        //World Wind GUI components

        private LayerList layerlist;  //Holds all Layers
        private WorldWindowGLCanvas canvas;     //Displays Model
        private Model model;      //world and layers

        //Swing and AWT GUI components
        JPanel mainPanel;   //Main focus of the GUI

        /*
         * Constructs the panel when the class is called
         */
        public CanvasPanel()
        {
            //canvas and layerlist variables
            canvas = new WorldWindowGLCanvas();

            loadPanel();    //loads the panel
            loadLayers();   //loads all default layers

            //sets the canvas to fill the panelspace
            canvas.setPreferredSize(new Dimension((mainPanel.getWidth() - 100), (mainPanel.getHeight() - 100)));

            //Creates a new model to display in the canvas
            model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);

            //adds all relevant layers to the model
            model.setLayers(layerlist);

            //adds the model to the canvas
            canvas.setModel(model);
        }

        /**
         * Sends the Panel when requested
         *
         * @return mainPanel, as JPanel object
         */
        public JPanel getPanel()
        {
            return mainPanel;
        }

        /**
         * called in the constructor, this method constructs the Swing and AWT
         * components of the Panel.
         */
        private void loadPanel()
        {
            //Creates and sets the dimensions of the Panel
            mainPanel = new JPanel();
            mainPanel.setSize(700, 700);
            mainPanel.setBackground(Color.DARK_GRAY);
            mainPanel.setBorder(
                    BorderFactory.createMatteBorder(2, 2, 2, 2, new Color(0, 0, 0))
            );

            //Adds the canvas to the panel
            mainPanel.add(canvas, BorderLayout.CENTER);
        }

        /**
         * Adds relevant layers to layerlist to be added to the model
         */
        private void loadLayers()
        {
            //creates a new layerlist array
            layerlist = new LayerList();

            //preloading all of the default layers
            layerlist.add(new StarsLayer());            //Stars
            layerlist.add(new SkyGradientLayer());      //Atmosphere
            layerlist.add(new BMNGWMSLayer());          //BlueMarble Globe
            layerlist.add(new CountryBoundariesLayer());//Political Boundaries
            layerlist.add(new MSVirtualEarthLayer());   //City View
            layerlist.add(new NASAWFSPlaceNameLayer()); //Names of Places
            layerlist.add(new LatLonGraticuleLayer());  //Lat and Long Grid
        }
    }

V这将两者放在一起V

protected void displayGUI(final String title)     {         //创建框架对象         guiFrame =新JFrame(标题);

    //sets exit button properties
    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //creates gui components
    menuBar = new FileMenuBar();
    sideBar = new OptionSideBar();
    canvasPanel = new CanvasPanel();

    //adds objects to the form
    guiFrame.setJMenuBar(menuBar.getMenu());
    guiFrame.add(sideBar.getSideBar(), BorderLayout.WEST);
    guiFrame.add(canvasPanel.getPanel(), BorderLayout.CENTER);

    //loads the form
    guiFrame.pack();

    //determines the size of the form
    Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
    int scrnWidth = guiFrame.getSize().width;
    int scrnHeight = guiFrame.getSize().height;
    int x = (scrnSize.width - scrnWidth) / 2;
    int y = (scrnSize.height - scrnHeight) / 2;

    //places form on the screen
    guiFrame.setLocation(x,y);

    //sets for to visible
    guiFrame.setVisible(true);
}

2 个答案:

答案 0 :(得分:1)

在我尝试一些预先生成的代码时,我设法偶然遇到了答案。下面是在NetBeans 8.0平台的顶级组件上使用WorldWindGLCanvas的工作示例。我希望这个答案可以帮助某些人,因为我不得不自己找不到这个答案。

以下是Topcomponent类。

package Earth;

import gov.nasa.worldwind.*;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import java.awt.BorderLayout;

import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;

import gov.nasa.worldwind.layers.*;
import gov.nasa.worldwind.layers.Earth.*;
import java.awt.Dimension;
import javax.swing.JInternalFrame;

@TopComponent.Description(
        preferredID = "EarthTopComponent",
        //iconBase="SET/PATH/TO/ICON/HERE", 
        persistenceType = TopComponent.PERSISTENCE_ALWAYS
)
@TopComponent.Registration(mode = "explorer", openAtStartup = false)
@ActionID(category = "Window", id = "Earth.EarthTopComponent")
@ActionReference(path = "Menu/Window" /*, position = 333 */)
@TopComponent.OpenActionRegistration(
        displayName = "#CTL_EarthAction",
        preferredID = "EarthTopComponent"
)
@Messages({
    "CTL_EarthAction=Earth",
    "CTL_EarthTopComponent=Earth Window",
    "HINT_EarthTopComponent=This is the Earth window"
})
public final class EarthTopComponent extends TopComponent {

    public EarthTopComponent() {
        initcomp();
        setName(Bundle.CTL_EarthTopComponent());
        setToolTipText(Bundle.HINT_EarthTopComponent());

    }

    private LayerList layerlist;  //Holds all Layers
    private WorldWindowGLCanvas canvas;     //Displays Model
    private Model model;      //world and layers
    private OptionSideBar sidebar; 
    private JInternalFrame layersPanel;

    private void initcomp()
    {
        canvas = new WorldWindowGLCanvas();
        sidebar = new OptionSideBar();

        //Creates a new model to display in the canvas
        model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);

        loadLayers();

        //adds all relevant layers to the model
        model.setLayers(layerlist);

        //adds the model to the canvas
        canvas.setModel(model);

        setLayout(new BorderLayout());

        layersPanel = new JInternalFrame("Layers Panel");
        layersPanel.setIconifiable(true);

        layersPanel.setSize(new Dimension(150,250 ));
        layersPanel.add(sidebar.getSideBar());
        layersPanel.setVisible(true);     

        setLayout(new BorderLayout());
        canvas.setSize(new Dimension(500,550));
        canvas.setVisible(true);

        add(layersPanel,BorderLayout.CENTER);
        add(canvas,BorderLayout.CENTER);
    }

     /**
     * Adds relevant layers to layerlist to be added to the model
     */
    private void loadLayers()
    {
        //creates a new layerlist array
        layerlist = new LayerList();

        //preloading all of the default layers
        layerlist.add(new StarsLayer());            //Stars
        layerlist.add(new SkyGradientLayer());      //Atmosphere
        layerlist.add(new BMNGWMSLayer());          //BlueMarble Globe
        layerlist.add(new CountryBoundariesLayer());//Political Boundaries
        layerlist.add(new MSVirtualEarthLayer());   //City View
        layerlist.add(new NASAWFSPlaceNameLayer()); //Names of Places
        layerlist.add(new LatLonGraticuleLayer());  //Lat and Long Grid        
    }
}

答案 1 :(得分:0)

在加载TopComponent之前出现问题时,此问题“无法找到具有preferredID的TopCoponent ...”。

一个简单的例子:你试图在失败的构造函数中加载一些东西(在任何深度)。

这个无法解释的信息使我不止一次发疯!

(也回答here

希望这有帮助。