如何在Java swing应用程序中打开单独的窗口

时间:2014-11-09 04:40:49

标签: java swing nullpointerexception

我有一个java应用程序,当用户按下按钮时,我希望它在新窗口中打开另一个不同的应用程序。但是,应用程序是Eclipse中的编程应用程序,而不是一个下载到我的计算机上的程序。我尝试了各种各样的东西,比如运行线程,但无济于事。以下是用户按下按钮的类的部分:

JButton LiveFeed = new JButton("Live Feed");
final JPanel jsr3 = new JPanel();
jsr3.add(LiveFeed); 
LiveFeed.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            new KinectViewer();
        }

    });
jsr3.setVisible(true);

以下是我试图从主应用程序中单独打开的类:

package skeleton;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import edu.ufl.digitalworlds.gui.DWApp;

@SuppressWarnings("serial")
public class KinectViewer extends DWApp implements ChangeListener
{

Kinect myKinect;
ViewerPanel3D main_panel;
JSlider elevation_angle;
JCheckBox near_mode;
JCheckBox seated_skeleton;
JCheckBox track_skeleton;
JButton turn_off;
JComboBox depth_resolution;
JComboBox video_resolution;
JCheckBox show_video;
JCheckBox mask_players;
JLabel accelerometer;

public void GUIsetup(JPanel p_root) {


    setLoadingProgress("Intitializing Kinect...",20);
    myKinect=new Kinect();
    if(myKinect.start(true,Kinect.NUI_IMAGE_RESOLUTION_320x240,Kinect.NUI_IMAGE_RESOLUTION_640x480)==0)
    {
        DWApp.showErrorDialog("ERROR", "<html><center><br>ERROR: The Kinect device could not be initialized.<br><br>1. Check if the Microsoft's Kinect SDK was succesfully installed on this computer.<br> 2. Check if the Kinect is plugged into a power outlet.<br>3. Check if the Kinect is connected to a USB port of this computer.</center>");
        //System.exit(0); 
    }

    myKinect.computeUV(true);

    near_mode=new JCheckBox("Near mode");
    near_mode.addActionListener(this);

    seated_skeleton=new JCheckBox("Seated skeleton");
    seated_skeleton.addActionListener(this);

    elevation_angle=new JSlider();
    elevation_angle.setMinimum(-27);
    elevation_angle.setMaximum(27);
    elevation_angle.setValue((int)myKinect.getElevationAngle());
    elevation_angle.setToolTipText("Elevation Angle ("+elevation_angle.getValue()+" degrees)");
    elevation_angle.addChangeListener(this);

    turn_off=new JButton("Turn off");
    turn_off.addActionListener(this);

    depth_resolution=new JComboBox();
    depth_resolution.addItem("80x60");
    depth_resolution.addItem("320x240");
    depth_resolution.addItem("640x480");
    depth_resolution.setSelectedIndex(1);
    depth_resolution.addActionListener(this);

    video_resolution=new JComboBox();
    video_resolution.addItem("640x480");
    video_resolution.addItem("1280x960");
    video_resolution.setSelectedIndex(0);
    video_resolution.addActionListener(this);

    track_skeleton=new JCheckBox("Track Skeletons");
    track_skeleton.setSelected(true);
    track_skeleton.addActionListener(this);

    show_video=new JCheckBox("Show video");
    show_video.setSelected(true);
    show_video.addActionListener(this);

    mask_players=new JCheckBox("Mask Players");
    mask_players.setSelected(false);
    mask_players.addActionListener(this);

    JPanel controls=new JPanel(new GridLayout(0,6));
    controls.add(new JLabel("Depth Stream:"));
    controls.add(depth_resolution);
    controls.add(near_mode);

    controls.add(new JLabel("Video Stream:"));
    controls.add(video_resolution);
    controls.add(show_video);

    controls.add(new JLabel("Skeleton Stream:"));
    controls.add(track_skeleton);
    controls.add(seated_skeleton);

    controls.add(mask_players);
    accelerometer=new JLabel("0,0,0");
    controls.add(accelerometer);
    controls.add(elevation_angle);
    //controls.add(turn_off);


    setLoadingProgress("Intitializing OpenGL...",60);
    main_panel=new ViewerPanel3D();
    myKinect.setViewer(main_panel);
    myKinect.setLabel(accelerometer);

    p_root.add(main_panel, BorderLayout.CENTER);
    p_root.add(controls, BorderLayout.SOUTH);
    System.out.print("GUIsetup");
}

public void GUIclosing()
{
    myKinect.stop();
}

private void resetKinect()
{
    if(turn_off.getText().compareTo("Turn on")==0) return;

    myKinect.stop();
    int depth_res=Kinect.NUI_IMAGE_RESOLUTION_INVALID;
    if(depth_resolution.getSelectedIndex()==0) depth_res=Kinect.NUI_IMAGE_RESOLUTION_80x60;
    else if(depth_resolution.getSelectedIndex()==1) depth_res=Kinect.NUI_IMAGE_RESOLUTION_320x240;
    else if(depth_resolution.getSelectedIndex()==2) depth_res=Kinect.NUI_IMAGE_RESOLUTION_640x480;

    int video_res=Kinect.NUI_IMAGE_RESOLUTION_INVALID;
    if(video_resolution.getSelectedIndex()==0) video_res=Kinect.NUI_IMAGE_RESOLUTION_640x480;
    else if(video_resolution.getSelectedIndex()==1) video_res=Kinect.NUI_IMAGE_RESOLUTION_1280x960;


    myKinect.start(track_skeleton.isSelected(),depth_res,video_res);
    myKinect.computeUV(true);
    if(seated_skeleton.isSelected())myKinect.startSkeletonTracking(true);
    if(near_mode.isSelected()) myKinect.setNearMode(true);
}

public static void main(String args[]) {

    createMainFrame("Kinect Viewer App");
    app=new KinectViewer();
    setFrameSize(730,570,null);
    System.out.print("main");
}

@Override
public void GUIactionPerformed(ActionEvent e)
{
    if(e.getSource()==near_mode)
    {
        if(near_mode.isSelected()) myKinect.setNearMode(true);
        else myKinect.setNearMode(false);
    }
    else if(e.getSource()==seated_skeleton)
    {
        if(seated_skeleton.isSelected()) myKinect.startSkeletonTracking(true);
        else myKinect.startSkeletonTracking(false);
    }
    else if(e.getSource()==track_skeleton)
    {
        if(track_skeleton.isSelected())
        {
            if(seated_skeleton.isSelected()) myKinect.startSkeletonTracking(true);
            else myKinect.startSkeletonTracking(false);
        }
        else myKinect.stopSkeletonTracking();
    }
    else if(e.getSource()==turn_off)
    {
        if(turn_off.getText().compareTo("Turn off")==0)
        {
            myKinect.stop();
            turn_off.setText("Turn on");
        }
        else
        {
            turn_off.setText("Turn off");
            resetKinect();
        }
    }
    else if(e.getSource()==depth_resolution)
    {
        resetKinect();
    }
    else if(e.getSource()==video_resolution)
    {
        resetKinect();
    }
    else if(e.getSource()==show_video)
    {
        main_panel.setShowVideo(show_video.isSelected());
    }
    else if(e.getSource()==mask_players)
    {
        myKinect.maskPlayers(mask_players.isSelected());
    }
}

@Override
public void stateChanged(ChangeEvent e) {
    if(e.getSource()==elevation_angle)
    {
        if(!elevation_angle.getValueIsAdjusting())
        {
            myKinect.setElevationAngle(elevation_angle.getValue());
            elevation_angle.setToolTipText("Elevation Angle ("+elevation_angle.getValue()+" degrees)");
        }
    }
}

}

但是,当我运行这个时,我会在NPE之后得到这个:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at edu.ufl.digitalworlds.gui.DWApp.<init>(DWApp.java:173)
at skeleton.KinectViewer.<init>(KinectViewer.java:53)
at skeleton.TestSplitPanels$1.actionPerformed(TestSplitPanels.java:66)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

为什么会这样?

请注意,KinectViewer可以作为自己的java应用程序打开,并且可以正常工作,如果您想了解DWApp,则DWApp类是ufdw中edu.ufl.digitalworlds.gui包中的一个类。 jar(通过上面发布的this site下载)。它有两种类型:一种用于java应用程序(我正在使用),另一种用于applet。在类中有一堆看似处理应用程序外观和进程的方法(单词大小调整,格式化,错误对话等)。在设置所有内容的过程中,我从git导入了一个项目,并使用了一个uri“research.dwi.ufl.edu/j4kdemo”。

0 个答案:

没有答案