Java常用API-Runtime

简介: Java常用API-Runtime

3 Runtime

3.1 概述

Runtime表示Java中运行时对象,可以获取到程序运行时设计到的一些信息

3.2 常见方法

常见方法介绍

我们要学习的Object类中的常见方法如下所示:

public static Runtime getRuntime()      //当前系统的运行环境对象

public void exit(int status)            //停止虚拟机

public int availableProcessors()        //获得CPU的线程数

public long maxMemory()                 //JVM能从系统中获取总内存大小(单位byte)

public long totalMemory()               //JVM已经从系统中获取总内存大小(单位byte)

public long freeMemory()                //JVM剩余内存大小(单位byte)

public Process exec(String command)     //运行cmd命令

代码示例:

public class RunTimeDemo1 {

   public static void main(String[] args) throws IOException {

       /*

           public static Runtime getRuntime() 当前系统的运行环境对象

           public void exit(int status) 停止虚拟机

           public int availableProcessors() 获得CPU的线程数

           public long maxMemory() JVM能从系统中获取总内存大小(单位byte)

           public long totalMemory() JVM已经从系统中获取总内存大小(单位byte)

           public long freeMemory() JVM剩余内存大小(单位byte)

           public Process exec(string command) 运行cmd命令

       */

       //1.获取Runtime的对象

       //Runtime r1 =Runtime.getRuntime();

       //2.exit 停止虚拟机

       //Runtime.getRuntime().exit(0);

       //System.out.println("看看我执行了吗?");

       //3.获得CPU的线程数

       System.out.println(Runtime.getRuntime().availableProcessors());//8

       //4.总内存大小,单位byte字节

       System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);//4064

       //5.已经获取的总内存大小,单位byte字节

       System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024);//254

       //6.剩余内存大小

       System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024);//251

       //7.运行cmd命令

       //shutdown :关机

       //加上参数才能执行

       //-s :默认在1分钟之后关机

       //-s -t 指定时间 : 指定关机时间

       //-a :取消关机操作

       //-r: 关机并重启

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

   }

}

3.3 恶搞好基友

需求:

界面上方按钮默认隐藏

界面中间有一个提示文本和三个按钮

当你的好基友点击中间三个按钮的时候就在N秒之后关机,不同的按钮N的值不一样

任意一个按钮被点击之后,上方了按钮出现。当点击上方按钮之后取消关机任务

恶搞好基友

public class Test {

   public static void main(String[] args) {

       new MyJframe();

   }

}

public class MyJframe extends JFrame implements ActionListener {

   JButton yesBut = new JButton("帅爆了");

   JButton midBut = new JButton("一般般吧");

   JButton noBut = new JButton("不帅,有点磕碜");

   JButton dadBut = new JButton("饶了我吧!");

   //决定了上方的按钮是否展示

   boolean flag = false;

   public MyJframe() {

       initJFrame();

       initView();

       //显示

       this.setVisible(true);

   }

   private void initView() {

       this.getContentPane().removeAll();

       if (flag) {

           //展示按钮

           dadBut.setBounds(50, 20, 100, 30);

           dadBut.addActionListener(this);

           this.getContentPane().add(dadBut);

       }

       JLabel text = new JLabel("你觉得自己帅吗?");

       text.setFont(new Font("微软雅黑", 0, 30));

       text.setBounds(120, 150, 300, 50);

       yesBut.setBounds(200, 250, 100, 30);

       midBut.setBounds(200, 325, 100, 30);

       noBut.setBounds(160, 400, 180, 30);

       yesBut.addActionListener(this);

       midBut.addActionListener(this);

       noBut.addActionListener(this);

       this.getContentPane().add(text);

       this.getContentPane().add(yesBut);

       this.getContentPane().add(midBut);

       this.getContentPane().add(noBut);

       this.getContentPane().repaint();

   }

   private void initJFrame() {

       //设置宽高

       this.setSize(500, 600);

       //设置标题

       this.setTitle("恶搞好基友");

       //设置关闭模式

       this.setDefaultCloseOperation(3);

       //置顶

       this.setAlwaysOnTop(true);

       //居中

       this.setLocationRelativeTo(null);

       //取消内部默认布局

       this.setLayout(null);

   }

   @Override

   public void actionPerformed(ActionEvent e) {

       Object obj = e.getSource();

       if (obj == yesBut) {

           //给好基友一个弹框

           showJDialog("xxx,你太自信了,给你一点小惩罚");

           try {

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

           } catch (IOException ioException) {

               ioException.printStackTrace();

           }

           flag = true;

           initView();

       } else if (obj == midBut) {

           System.out.println("你的好基友点击了一般般吧");

           //给好基友一个弹框

           showJDialog("xxx,你还是太自信了,也要给你一点小惩罚");

           try {

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

           } catch (IOException ioException) {

               ioException.printStackTrace();

           }

           flag = true;

           initView();

       } else if (obj == noBut) {

           System.out.println("你的好基友点击了不帅");

           //给好基友一个弹框

           showJDialog("xxx,你还是有一点自知之明的,也要给你一点小惩罚");

           try {

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

           } catch (IOException ioException) {

               ioException.printStackTrace();

           }

           flag = true;

           initView();

       } else if (obj == dadBut) {

           //给好基友一个弹框

           showJDialog("xxx,这次就饶了你~");

           try {

               Runtime.getRuntime().exec("shutdown -a");

           } catch (IOException ioException) {

               ioException.printStackTrace();

           }

       }

   }

   public void showJDialog(String content) {

       //创建一个弹框对象

       JDialog jDialog = new JDialog();

       //给弹框设置大小

       jDialog.setSize(200, 150);

       //让弹框置顶

       jDialog.setAlwaysOnTop(true);

       //让弹框居中

       jDialog.setLocationRelativeTo(null);

       //弹框不关闭永远无法操作下面的界面

       jDialog.setModal(true);

       //创建Jlabel对象管理文字并添加到弹框当中

       JLabel warning = new JLabel(content);

       warning.setBounds(0, 0, 200, 150);

       jDialog.getContentPane().add(warning);

       //让弹框展示出来

       jDialog.setVisible(true);

   }

}


相关文章
|
13天前
|
Java API Spring
打造未来电商新引擎:揭秘Java可扩展API设计,让支付与物流灵活如丝,引领电商时代潮流!
【8月更文挑战第30天】本文通过电商平台案例,探讨了如何设计可扩展的Java API。首先定义支付和物流服务的接口与抽象类,然后实现具体服务,接着引入工厂模式或依赖注入管理服务实例,最后通过配置实现灵活扩展。这种设计确保了应用架构的灵活性和长期稳定性。
32 3
|
14天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
42 0
|
22天前
|
Java 编译器 API
Java新手必看:轻松掌握API文档使用技巧!
API是预定义的接口,允许开发人员使用一组例程及协议而无需了解内部实现细节。Java API文档详述了标准类库,支持平台无关性和安全性,确保Java程序跨平台的一致性行为。Java类可通过单文件或多文件定义,并支持内部类及包组织。常用API如`Scanner`用于输入处理,`Random`生成随机数,`ArrayList`提供动态列表管理,而`Arrays`和`Math`分别简化数组操作和数学计算。掌握这些API能显著提升Java开发效率。
|
6天前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
29 11
|
3天前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
5天前
|
Java API 数据处理
【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!
|
6天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
4天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
12天前
|
Java API
Java 8新特性:Lambda表达式与Stream API的深度解析
【7月更文挑战第61天】本文将深入探讨Java 8中的两个重要特性:Lambda表达式和Stream API。我们将首先介绍Lambda表达式的基本概念和语法,然后详细解析Stream API的使用和优势。最后,我们将通过实例代码演示如何结合使用Lambda表达式和Stream API,以提高Java编程的效率和可读性。
|
19天前
|
安全 Java API