Java 要关闭的远程桌面

Java 要关闭的远程桌面,java,Java,我制作了一个程序来监控网络中的活动机器,并将IP地址完美地显示给JList(jList1)。当我单击列表中的一个IP地址,然后右键单击鼠标时,会出现一个JPopupMenu,其中包含一个“Shutdown”菜单。当我试图从弹出菜单中单击“关机”菜单时,显示了一个错误,表示: Apr 14, 2011 1:57:07 PM UsernamePasswordPackage.NetCafeTime$9 actionPerformed SEVERE: null java.lang.RuntimeExce

我制作了一个程序来监控网络中的活动机器,并将IP地址完美地显示给JList(jList1)。当我单击列表中的一个IP地址,然后右键单击鼠标时,会出现一个JPopupMenu,其中包含一个“Shutdown”菜单。当我试图从弹出菜单中单击“关机”菜单时,显示了一个错误,表示:

Apr 14, 2011 1:57:07 PM UsernamePasswordPackage.NetCafeTime$9 actionPerformed SEVERE: null java.lang.RuntimeException: Unsupported operating system.
        at UsernamePasswordPackage.NetCafeTime.shutdown(NetCafeTime.java:359)
        at UsernamePasswordPackage.NetCafeTime$9.actionPerformed(NetCafeTime.java:444)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
我用来显示弹出菜单的代码:

public void showProjectMenu(MouseEvent e){
    JPopupMenu menu = new JPopupMenu();
    JMenuItem menuItem;
    menuItem = new JMenuItem("Shutdown");
    menuItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev){
            //JOptionPane.showMessageDialog(null, "newline");
            try {
                shutdown();
            } catch (RuntimeException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
    menu.add(menuItem);
    menu.show(e.getComponent(),e.getX(),e.getY());
}
public void showProjectMenu(MouseEvent e){
    JPopupMenu menu = new JPopupMenu();
    JMenuItem menuItem;
    menuItem = new JMenuItem("Shutdown");
    menuItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev){
            //JOptionPane.showMessageDialog(null, "newline");
            try {
                shutdown();
            } catch (RuntimeException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
    menu.add(menuItem);
    menu.show(e.getComponent(),e.getX(),e.getY());
}
鼠标单击事件代码:

   private void jList1MousePressed(java.awt.event.MouseEvent evt) {
    if(SwingUtilities.isRightMouseButton(evt)&&!jList1.isSelectionEmpty()&&jList1.locationToIndex(evt.getPoint())==jList1.getSelectedIndex()){
            showProjectMenu(evt);
        }
    }

    private void jList1MouseReleased(java.awt.event.MouseEvent evt) {
    if(SwingUtilities.isRightMouseButton(evt)&&!jList1.isSelectionEmpty()&&jList1.locationToIndex(evt.getPoint())==jList1.getSelectedIndex()){
            showProjectMenu(evt);
        }
    }
我用来显示弹出菜单的代码:

public void showProjectMenu(MouseEvent e){
    JPopupMenu menu = new JPopupMenu();
    JMenuItem menuItem;
    menuItem = new JMenuItem("Shutdown");
    menuItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev){
            //JOptionPane.showMessageDialog(null, "newline");
            try {
                shutdown();
            } catch (RuntimeException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
    menu.add(menuItem);
    menu.show(e.getComponent(),e.getX(),e.getY());
}
public void showProjectMenu(MouseEvent e){
    JPopupMenu menu = new JPopupMenu();
    JMenuItem menuItem;
    menuItem = new JMenuItem("Shutdown");
    menuItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev){
            //JOptionPane.showMessageDialog(null, "newline");
            try {
                shutdown();
            } catch (RuntimeException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(NetCafeTime.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
    menu.add(menuItem);
    menu.show(e.getComponent(),e.getX(),e.getY());
}
我用IP地址关闭另一台电脑的代码:

public void shutdown()throws RuntimeException, IOException{
    String shutdownCommand;
    String operatingSystem = System.getProperty("os.name");
    if("Linux".equals(operatingSystem)||"Mac OS X".equals(operatingSystem)){
        shutdownCommand = "shutdown -h now";
    }else if("windows".equals(operatingSystem)){
        shutdownCommand = "shutdown.exe -s -t 0";
    }else{
        throw new RuntimeException("Unsupported operating system.");
    }
    Runtime.getRuntime().exec(shutdownCommand);
}
问题是,我无法关闭另一台电脑

非常感谢您提供的任何帮助。

错误显示:
不支持的操作系统“
在您的关机方法中,这是
运行时异常的消息,如果当前操作系统不是“Linux”、“Max OS X”或“windows”,则会抛出该消息。那么您是否检查了System.getProperty(“os.name”)
实际返回的内容

编辑:在重新阅读您的问题后,我认为您希望关闭具有所选IP地址的机器。因此,在您的关机方法中,我认为您必须首先连接到该机器并在那里执行
shutdown
命令。这意味着您需要在要远程关闭的每台机器上运行一个服务器程序。编写您自己的一个或在每个上安装一个SSH服务器,然后使用连接到计算机。错误显示:
“不支持的操作系统”
,在您的关机方法中,这是
运行时异常的消息,如果当前操作系统不是“Linux”、“Max OS X”或“windows”,则会抛出该消息。那么您是否检查了System.getProperty(“os.name”)
实际返回的内容

编辑:在重新阅读您的问题后,我认为您希望关闭具有所选IP地址的机器。因此,在您的关机方法中,我认为您必须首先连接到该机器并在那里执行
shutdown
命令。这意味着您需要在要远程关闭的每台机器上运行一个服务器程序。要么编写您自己的一个,要么在每个服务器上安装一个SSH服务器,然后使用连接到计算机,我建议您进行检查此代码在此示例中返回Windows 2000

我建议您检查一下。据我所知,
String operatingSystem=System.getProperty(“os.name”)此代码在此示例中返回Windows 2000


您比较操作系统名称的方式应该改进。要包含任何版本的Windows操作系统,您应该测试:
System.getProperty(“OS.name”).toLowerCase().contains(“Windows”)
谢谢,先生,我改进了这一点。我现在的问题是如何连接到其他IP地址,以便建立连接,然后关闭它。谢谢。对于Windows操作系统,您的关机命令缺少一些信息。有关完整的在线文档,请参阅
shutdown/?
。但是,此命令需要更高的权限。您的Java应用程序应该在管理员模式下运行,以使其正常工作。您比较操作系统名称的方式应该得到改进。要包含任何版本的Windows操作系统,您应该测试:
System.getProperty(“OS.name”).toLowerCase().contains(“Windows”)
谢谢,先生,我改进了这一点。我现在的问题是如何连接到其他IP地址,以便建立连接,然后关闭它。谢谢。对于Windows操作系统,您的关机命令缺少一些信息。有关完整的在线文档,请参阅
shutdown/?
。但是,此命令需要更高的权限。您的Java应用程序应在管理员模式下运行,以使其正常工作。