当前位置: 首页 > 知识库问答 >
问题:

为什么我的远程关机Java程序不工作?

万修然
2023-03-14

我已经连接了我的Windows10和linux机器。我想远程关闭我的Windows10电脑从我的Linux。然而,当我使用下面的Java程序时,它并没有关掉我的窗户。我试过用

C:\Windows\System32\shutdown /m  \\<ip>

相反,在程序中输出命令,但我得到了相同的结果。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] arg) {

        Process process;
        try {
            List<String> cmdList = new ArrayList<String>();
            cmdList.add("shutdown");
            cmdList.add("-m");
            cmdList.add("\\\\");
            cmdList.add("192.168.43.xx");
            ProcessBuilder pb = new ProcessBuilder();
            pb.command(cmdList);

            process = pb.start();
            process.waitFor();

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;

            while ((line = reader.readLine()) != null)
                System.out.println(line);// System.out.println(line);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


输出

Process finished with exit code 0

共有1个答案

公孙涵育
2023-03-14

C:\windows\system32\shutdown.exe是只在Windows上运行的软件工具。你不能在Linux上运行它。ProcessBuilder运行本地安装的软件,而Shutdown.exe不能在本地安装--它不能在Linux上运行!

相反,您运行的是/sbin/shutdown,这是一个完全不同的命令,它只能关闭运行它的linux盒,对于从linux机器远程关闭windows机器的工作一点用处都没有。别管关机了。

samba-common包是一个linux工具,包含许多与windows网络交互的内容。它包括发送与Windows的shutdown.exe发送的关闭命令相同的功能。您必须安装这个工具,然后用ProcessBuilder调用它。更多信息在此SO答案。

 类似资料:
  • 我一直在尝试对Java小程序进行远程调试。我使用的是Java 7 update 51,当我尝试加载小程序时,它会在Java控制台中显示,然后被触发。 我在Javacpl中将以下参数作为运行时参数传递:“-Djava.compiler=NONE-Xnoagent-Xdebug-Xrunjdwp:transport=dt_socket,address=8007,server=y,suspend=n”

  • 按下开始按钮后,它运行程序,但它不允许我使用右下角的退出按钮,我不知道为什么它会这样做。有人能帮忙吗。我希望它继续运行该程序,但仍然允许我使用该按钮,因此,如果我想中途退出,它将允许我。项目描述:“对于我的项目,我将使用python创建一个随机迷宫生成软件。我将创建一个网格呈现给用户。该软件将从左上角开始,然后创建迷宫,沿随机方向运行,最后在右下角结束。”

  • 我想知道为什么我的Java程序在控制台工作,当我做: javac Main.java Java美因河 ...而不是在Eclipse中,因为我有这个错误: 线程“main”java.lang.NullPointerException在codepin.main.main(main.java:48)-->char passwordarray[]=console.readpassword(“enter p

  • 我对这段代码有一个问题,因为我似乎找不到问题所在?这是我试图解决的问题:-声明并编写一个名为valid_triangle的函数,它将表示三角形三边长度的三个实数作为参数,并根据这三个长度是否能够构成三角形输出真或假。 关于三角形的以下规则: 三角形只能有正长度的边 三角形任意两条边的长度之和必须大于第三条边的长度

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 这是:“Parent root=fxmlloader.load(getClass().getResource(”sample.fxml“));” 我不明白剩下的部分,所以我希望你能轻松地解决这个问题:)