سؤال

هل هناك طريقة لإيقاف تشغيل الكمبيوتر باستخدام طريقة Java المضمنة؟

هل كانت مفيدة؟

المحلول

قم بإنشاء وظيفتك الخاصة لتنفيذ نظام التشغيل يأمر عبر ال سطر الأوامر?

من أجل المثال.لكن تعرف أين ولماذا تريد استخدام هذا كما لاحظ الآخرون.

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}

نصائح أخرى

إليك مثال آخر يمكن أن يعمل عبر الأنظمة الأساسية:

public static 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);
    System.exit(0);
}

قد تتطلب أوامر إيقاف التشغيل المحددة مسارات أو امتيازات إدارية مختلفة.

هنا مثال باستخدام أباتشي كومنز لانج SystemUtils:

public static boolean shutdown(int time) throws IOException {
    String shutdownCommand = null, t = time == 0 ? "now" : String.valueOf(time);

    if(SystemUtils.IS_OS_AIX)
        shutdownCommand = "shutdown -Fh " + t;
    else if(SystemUtils.IS_OS_FREE_BSD || SystemUtils.IS_OS_LINUX || SystemUtils.IS_OS_MAC|| SystemUtils.IS_OS_MAC_OSX || SystemUtils.IS_OS_NET_BSD || SystemUtils.IS_OS_OPEN_BSD || SystemUtils.IS_OS_UNIX)
        shutdownCommand = "shutdown -h " + t;
    else if(SystemUtils.IS_OS_HP_UX)
        shutdownCommand = "shutdown -hy " + t;
    else if(SystemUtils.IS_OS_IRIX)
        shutdownCommand = "shutdown -y -g " + t;
    else if(SystemUtils.IS_OS_SOLARIS || SystemUtils.IS_OS_SUN_OS)
        shutdownCommand = "shutdown -y -i5 -g" + t;
    else if(SystemUtils.IS_OS_WINDOWS)
        shutdownCommand = "shutdown.exe /s /t " + t;
    else
        return false;

    Runtime.getRuntime().exec(shutdownCommand);
    return true;
}

تأخذ هذه الطريقة في الاعتبار عددًا أكبر بكثير من أنظمة التشغيل مقارنة بأي من الإجابات المذكورة أعلاه.كما أنها تبدو أجمل كثيرًا وأكثر موثوقية من التحقق من ذلك os.name ملكية.

يحرر: يدعم التأخير وجميع إصدارات Windows (inc.8/10).

الجواب السريع هو لا.الطريقة الوحيدة للقيام بذلك هي عن طريق استدعاء الأوامر الخاصة بنظام التشغيل والتي ستتسبب في إيقاف تشغيل الكمبيوتر، على افتراض أن التطبيق الخاص بك لديه الامتيازات اللازمة للقيام بذلك.يعد هذا غير محمول بطبيعته، لذا ستحتاج إما إلى معرفة مكان تشغيل التطبيق الخاص بك أو أن يكون لديك طرق مختلفة لأنظمة تشغيل مختلفة واكتشاف أي منها ستستخدم.

أستخدم هذا البرنامج لإيقاف تشغيل الكمبيوتر خلال X دقيقة.

   public class Shutdown {
    public static void main(String[] args) {

        int minutes = Integer.valueOf(args[0]);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                ProcessBuilder processBuilder = new ProcessBuilder("shutdown",
                        "/s");
                try {
                    processBuilder.start();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

        }, minutes * 60 * 1000);

        System.out.println(" Shutting down in " + minutes + " minutes");
    }
 }

من الأفضل استخدام .startsWith بدلاً من استخدام .equals ...

String osName = System.getProperty("os.name");        
if (osName.startsWith("Win")) {
  shutdownCommand = "shutdown.exe -s -t 0";
} else if (osName.startsWith("Linux") || osName.startsWith("Mac")) {
  shutdownCommand = "shutdown -h now";
} else {
  System.err.println("Shutdown unsupported operating system ...");
    //closeApp();
}

عمل جيد

رع.

يمكنك استخدام JNI للقيام بذلك بأي طريقة تفعلها باستخدام C/C++.

في نظام التشغيل Windows Embedded بشكل افتراضي، لا يوجد أمر إيقاف التشغيل في cmd.في مثل هذه الحالة، تحتاج إلى إضافة هذا الأمر يدويًا أو استخدام الوظيفة ExitWindowsEx من win32 (user32.lib) باستخدام JNA (إذا كنت تريد المزيد من Java) أو JNI (إذا كان من الأسهل عليك تعيين الامتيازات في كود C).

سطر واحد سهل

Runtime.getRuntime().exec("shutdown -s -t 0");

ولكنها تعمل فقط على النوافذ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top