gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:51:24 27 4
gpt4 key购买 nike

我在 NetBeans 8.0 平台应用程序中创建了一个 TopComponent。我想在其上显示 Canvas ,但是当调用代码以显示 worldwind 组件时,会引发异常:

"A java.lang.IllegalStateException exception has occurred. Click Show Details or see the messages.log file located in your C:\Users\abradford\Desktop\NetBeans Projects\MTAET\MTAET\build\testuserdir\var\log folder."

java.lang.IllegalStateException: Cannot find TopComponent with preferredID EarthTopComponent, see IDE log for more details.

为此,TopComponent 依赖于 WorldWind.jar 文件和 Jogl 文件。而WorldWind.jar文件仅依赖于Jogl文件。我只想问是否有人可以解释为什么 worldwind 组件不能与 TopComponent 一起工作。如果有人已经有一段可以工作的代码来桥接它或解决它,那也很棒。自从我编写 Java 程序以来已经有一段时间了,我可能对这一切开始有点强烈,所以如果答案是显而易见的,请原谅我。

这是我正在使用的代码:V 这是顶级组件 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(最终字符串标题) { //创建框架对象 guiFrame = new 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);
}

最佳答案

我在尝试一些预先生成的代码时偶然发现了答案。以下是在 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
}
}

关于java - 无法在 NetBeans 8.0 平台上的 Topcomponent 中使用 Worldwind 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com