精华内容
下载资源
问答
  • WPF关闭应用程序方法

    2018-04-12 09:20:00
    WPF关闭应用程序方法 原文:WPF关闭应用程序方法很多人认为关闭应用程序应该很简单,例如WindowsForm里一个Application.Exit();方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Application类没有...
    原文:WPF关闭应用程序方法

     很多人认为关闭应用程序应该很简单,例如WindowsForm里一个Application.Exit();方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Application类没有该方法,倒是有一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多:

    在WPF应用程序的关闭是有ShutdownMode属性设置,具有3中枚举类型的值:

    1)OnLastWindowClose 应用程序最后一个窗体关闭时关闭应用程序

    2)OnMainWindowClose 应用程序主窗体关闭时关闭应用程序

    3)OnExplicitShutdown   显示调用关闭

    在OnExplicitShutdown模式下必须显示调用Application实例的ShutDown方法

    例如:Application.Current.Shutdown(-1);这里Application.Current返回当前应用程序的当前Application实例。

             注意以上不适应XBAP,XBAP在浏览器关闭时自动关闭。

     

     

    需求:需要在许多子窗体中关闭整个程序(WPF)

    winform实现:Application.Exit();

    WPF实现:

        App.xaml文件:

    代码
       <Application x:Class="pc.App"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
        StartupUri
    ="Windows1.xaml" ShutdownMode="OnExplicitShutdown">


       Windows1.xaml文件(部分):

        
    <Button Margin="37,0,15,15" Style="{DynamicResource btn_Exit}" Content="Button" Grid.Column="2" Grid.Row="3" Height="41" VerticalAlignment="Bottom" Width="100" x:Name="btn_Exits" Click="btn_Exits_Click" />


       Windows1.xaml.cs文件(部分):

         private void btn_Exits_Click(object sender, RoutedEventArgs e)
            {
                Application.Current.Shutdown();
                
            }

     

    十分简单!此后只需在按钮事件中加入Application.Current.Shutdown(),即可退出程序

     

    另外,还有一种强制终止应用程序进程的方法

     

    Environment.Exit(0)可以立即中断程序执行并退出

     

    这个方法用起来的感觉类似在任务管理器里找到进程并终止,即立刻关闭进程,不管该进程目前有没有工作,在做什么工作。

    在WPF中调用该方法即立即退出,不会等待当前工作完成。

    posted on 2018-04-12 09:20 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/8805076.html

    展开全文
  • 本文介绍Java应用程序窗口关闭的六种方法。1.使用JFrameenableEvents和processWindowEvent//Frame1.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassFrame1extendsJFrame{...

    本文介绍Java应用程序窗口关闭的六种方法。

    1.使用JFrame的enableEvents和processWindowEvent

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    public class Frame1 extends JFrame {

    public Frame1() {

    enableEvents(AWTEvent.WINDOW_EVENT_MASK);

    this.setSize(new Dimension(400, 300));

    this.setTitle("Frame1");

    }

    protected void processWindowEvent(WindowEvent e) {

    super.processWindowEvent(e);

    if (e.getID() == WindowEvent.WINDOW_CLOSING) {

    System.exit(0);

    }

    4000

    }

    }  2.直接实现WindowListener接口

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    public class Frame1 extends Frame implements WindowListener {

    public Frame1() {

    this.setSize(new Dimension(400, 300));

    this.setTitle("Frame1");

    this.addWindowListener(this);

    }

    public void windowClosing(WindowEvent windowEvent) {

    System.exit(0);

    }

    public void windowOpened(WindowEvent windowEvent) { }

    public void windowClosed(WindowEvent windowEvent) { }

    public void windowIconified(WindowEvent windowEvent) { }

    public void windowDeiconified(WindowEvent windowEvent) { }

    public void windowActivated(WindowEvent windowEvent) { }

    public void windowDeactivated(WindowEvent windowEvent) { }

    }  3.直接继承窗体适配器WindowAdapter

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    public class Frame1 extends WindowAdapter {

    public Frame1() {

    Frame f=new Frame();

    f.setSize(new Dimension(400, 300));

    f.setTitle("Frame1");

    f.addWindowListener(this);

    f.setVisible(true);

    }

    public static void main(String[] s){

    new Frame1();

    }

    public void windowClosing(WindowEvent windowEvent) {

    System.exit(0);

    }

    }  4.间接继承窗体适配器WindowAdapter

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    public class Frame1 extends Frame {

    public Frame1() {

    this.setSize(new Dimension(400, 300));

    this.setTitle("Frame1");

    this.addWindowListener(new winAdapter());

    this.setVisible(true);

    }

    public static void main(String[] s){

    new Frame1();

    }

    }

    class winAdapter extends WindowAdapter{

    public void windowClosing(WindowEvent windowEvent) {

    System.exit(0);

    }

    }  5.间接实现WindowListener接口

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    public class Frame1 extends Frame {

    public Frame1() {

    this.setSize(new Dimension(400, 300));

    this.setTitle("Frame1");

    this.addWindowListener(new winEventHandle());

    this.setVisible(true);

    }

    public static void main(String[] s){

    new Frame1();

    }

    }

    class winEventHandle implements WindowListener {

    public void windowClosing(WindowEvent windowEvent) {

    System.exit(0);

    }

    public void windowOpened(WindowEvent windowEvent) { }

    public void windowClosed(WindowEvent windowEvent) { }

    public void windowIconified(WindowEvent windowEvent) { }

    public void windowDeiconified(WindowEvent windowEvent) { }

    public void windowActivated(WindowEvent windowEvent) { }

    public void windowDeactivated(WindowEvent windowEvent) { }

    }  6.使用Inner Class

    //Frame1.java

    import java.awt.*;

    import java.awt.event.*;

    public class Frame1{

    public Frame1(){

    Frame f=new Frame();

    f.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);

    }

    });

    f.setSize(new Dimension(400, 300));

    f.setVisible(true);

    }

    public static void main(String[] s){

    new Frame1();

    }

    }  Jframe的关闭方法:

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    frame的关闭方法如下:

    this.addWindowListener(new java.awt.event.WindowAdapter() {

    public void windowClosing(java.awt.event.WindowEvent e) {

    System.exit(0);

    }

    });

    展开全文
  • SpringBoot应用程序的关闭目前总结起来4种方式:Rest接口:使用spring-boot-starter-actuator模块里的ShutdownEndpointSpringApplication的exit静态方法:直接调用该静态方法即可JMX:使用SpringBoot内部提供的...

    84de45c2c9bf372b03dff6c66129db9b.png

    SpringBoot应用程序的关闭目前总结起来有4种方式:

    1. Rest接口:使用spring-boot-starter-actuator模块里的ShutdownEndpoint
    2. SpringApplication的exit静态方法:直接调用该静态方法即可
    3. JMX:使用SpringBoot内部提供的MXBean
    4. 使用第三方进程管理工具

    # Rest接口

    Rest接口使用Endpoint暴露出来,需要引入spring-boot-starter-actuator这个stater。

    这个关闭应用程序对应的Endpoint是ShutdownEndpoint,直接调用ShutdownEndpoint提供的rest接口即可。得先开启ShutdownEndpoint(默认不开启),以及不进行安全监测:

    endpoints.shutdown.enabled: true
    endpoints.shutdown.sensitive: false

    然后调用rest接口:

    curl -X POST http://localhost:8080/shutdown  

    可以使用spring-security进行安全监测:

    endpoints.shutdown.sensitive: true
    security.user.name: admin
    security.user.password: admin
    management.security.role: SUPERUSER  

    然后使用用户名和密码进行调用:

    curl -u admin:admin -X POST http://127.0.0.1:8080/shutdown  

    这个ShutdownEndpoint底层其实就是调用了Spring容器的close方法:

    @Override
    public Map<String, Object> invoke() {
    
      if (this.context == null) {
        return Collections.<String, Object>singletonMap("message",
            "No context to shutdown.");
      }
    
      try {
        return Collections.<String, Object>singletonMap("message",
            "Shutting down, bye...");
      }
      finally {
    
        new Thread(new Runnable() {
          @Override
          public void run() {
            try {
              Thread.sleep(500L);
            }
            catch (InterruptedException ex) {
              // Swallow exception and continue
            }
            ShutdownEndpoint.this.context.close();
          }
        }).start();
    
      }
    }
        

    # SpringApplication的exit静态方法

    SpringApplication提供了一个exit静态方法,用于关闭Spring容器,该方法还有一个参数exitCodeGenerators表示ExitCodeGenerator接口的数组。

    ExitCodeGenerator接口是一个生成退出码exitCode的生成器。

    public static int exit(ApplicationContext context,
        ExitCodeGenerator... exitCodeGenerators) {
      Assert.notNull(context, "Context must not be null");
      int exitCode = 0; // 默认的退出码是0
      try {
        try {
          // 构造ExitCodeGenerator集合
          ExitCodeGenerators generators = new ExitCodeGenerators();
          // 获得Spring容器中所有的ExitCodeGenerator类型的bean
          Collection<ExitCodeGenerator> beans = context
              .getBeansOfType(ExitCodeGenerator.class).values();
          // 集合加上参数中的ExitCodeGenerator数组
          generators.addAll(exitCodeGenerators);
          // 集合加上Spring容器中的ExitCodeGenerator集合
          generators.addAll(beans);
          // 遍历每个ExitCodeGenerator,得到最终的退出码exitCode
          // 这里每个ExitCodeGenerator生成的退出码如果比0大,那么取最大的
          // 如果比0小,那么取最小的
          exitCode = generators.getExitCode();
          if (exitCode != 0) { // 如果退出码exitCode不为0,发布ExitCodeEvent事件
            context.publishEvent(new ExitCodeEvent(context, exitCode));
          }
        }
        finally {
          // 关闭Spring容器
          close(context);
        }
    
      }
      catch (Exception ex) {
        ex.printStackTrace();
        exitCode = (exitCode == 0 ? 1 : exitCode);
      }
      return exitCode;
    }

    我们写个Controller直接调用exit方法:

    @Autowired
    private ApplicationContext applicationContext;
    
    @PostMapping("/stop")
    public String stop() {
        // 加上自己的权限验证
        SpringApplication.exit(applicationContext);
        return "ok";
    }

    # JMX

    spring-boot-starter-actuator这个stater内部会构造ShutdownEndpointMBean。

    使用jconsole可以看到这个MBean:

    SpringBoot内部也提供了一个SpringApplicationAdminMXBean,但是需要开启:

    spring.application.admin.enabled: true 

    # 使用第三方进程管理工具

    比如我们的应用程序部署在linux系统上,可以借助一些第三方的进程管理工具管理应用程序的运行,比如supervisor。

    设置program:

    [program:stop-application]
    command=java -jar /yourjar.jar
    process_name=%(program_name)s
    startsecs=10
    autostart=false
    autorestart=false
    stdout_logfile=/tmp/stop.log
    stderr_logfile=/tmp/stop-error.log

    使用supervisorctl进入控制台操作应用程序:

    supervisor> status
    stop-application                 STOPPED   Jun 27 03:50 PM
    supervisor> start stop-application
    stop-application: started
    supervisor> status
    stop-application                 RUNNING   pid 27918, uptime 0:00:11
    supervisor> stop stop-application
    stop-application: stopped
    supervisor> status
    stop-application                 STOPPED   Jun 27 03:50 PM  
    来源:http://fangjian0423.github.io/2017/06/28/springboot-application-exit
    展开全文
  • 项目里几个应用程序,它们之间先后关系,有时需要在某个程序中,重新启动另外一个应用程序,因此需要找到windows api来实现。 在这里列举三种情况:在程序中,纯粹打开外部应用程序、纯粹关闭外部应用程序、...

    项目里有几个应用程序,它们之间有先后关系,有时需要在某个程序中,重新启动另外一个应用程序,因此需要找到windows api来实现。

    在这里列举三种情况:在程序中,纯粹打开外部应用程序、纯粹关闭外部应用程序、打开应用程序后过会儿再关闭它。

    我在这里只讲方法,不讲原理(因为windows api 太恶心了)

    1,纯粹打开外部应用程序:使用ShellExecute()

    #include<iostream>
    #include<Windows.h>
    #include<shellapi.h>
    int main(int argc, char* argv[])
    {
    	ShellExecute(0,L"open",L"e:/GWSLN/gwsln/Debug/Collector.exe",L"",L"",SW_SHOWNORMAL);
    	……
    }

    它的第三个参数为我们要打开的应用程序。

    注意点:

    windows api 使用自身的数据类型,因此想要传递字符串时,在字符串前加上 L 。


    2,纯粹关闭外部应用程序:使用FindWindow()找到应用程序窗口句柄,用GetWindowThreadProcessId() 得到该句柄对应的进程ID,然后关闭该进程。

    #include<iostream>
    #include<Windows.h>
    #include<shellapi.h>
    int main(int argc, char* argv[])
    {
    	HANDLE hProcessHandle; 
    	ULONG  nProcessID;
    	HWND   TheWindow;
    	TheWindow = ::FindWindow( NULL, L"计算器");//找到键盘窗口句柄
    	//"VVr2Keyboard"为键盘程序的名称				
    	if(NULL == TheWindow){
    		return FALSE;
    	}
    	::GetWindowThreadProcessId( TheWindow, &nProcessID );
    	hProcessHandle =::OpenProcess( PROCESS_TERMINATE,FALSE, nProcessID );
    	::TerminateProcess( hProcessHandle, 4 );
    	……
    }

    注意点:

    上面的FindWindow() 的第二个参数,是windows应用程序窗口左上方的那些东东,必须完全一致才能够打开,而不是应用程序在硬盘的存储位置。如我打开了计算器了,想要在应用程序里面关闭它,它的第二个参数就是窗口栏上的名称。如图:



    3,打开应用程序后过会儿再关闭它。使用ShellExecuteEx() 和 TerminateProcess() 来实现。

    #include<iostream>
    #include<Windows.h>
    #include<shellapi.h>
    int main(int argc, char* argv[])
    {
    	SHELLEXECUTEINFO e1;
    	memset(&e1,0,sizeof(e1));
    	e1.cbSize=sizeof(e1);
    	e1.hwnd=NULL;
    	e1.lpFile=L"e:/GWSLN/gwsln/Debug/Collector.exe";
    	e1.nShow=1;
    	e1.fMask=SEE_MASK_NOCLOSEPROCESS;
    	ShellExecuteEx(&e1);
    	Sleep(5000);
    	TerminateProcess(e1.hProcess,0);
    }

    通过填充一个 SHELLEXECUTEINFO 结构体,用它作为ShellExecuteEx()的参数,来打开应用程序,此函数跟ShellExecute() 函数的区别是,ShellExecute()在打开应用程序后,就关闭了该应用程序的句柄,就此两个应用程序不再产生关联。而ShellExecuteEx()打开应用程序后,把该应用程序的句柄保存在结构体的 .hProcess里面,以后可以通过该句柄关闭外部应用程序。






    展开全文
  • 方法就可以关闭应用程序,释放掉资源。 WPF里Application类没有该方法,但是一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多: 在WPF应用程序的关闭是ShutdownMode属性设置,具有3中枚举类型的值: 1...
  • WPF里Application类没有该方法,但是一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多:在WPF应用程序的关闭ShutdownMode属性设置,具有3中枚举类型的值:1)OnLastWindowClose 应用程序最后一个窗体...
  • monkeytalk 的问题:被测试应用程序必须是已...解决问题思路:还是基于adb shell 启动,关闭 程序的方法,见:adb shell 启动,停止 android 应用程序 解决方法: 启动方法: 在monkeytalk视图下,最前面添加:
  • Android 安全退出应用程序的方法总结 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程。 android.os.Process....
  • 在android系统中结束进程的方法有好几种,今天在阅读源码时发现最有效的方法如下: 1.使用的方法为ActivityManager的 forceStopPackage:  A.在AndroidManifest.xml文件中 增加权限   android:name="android....
  • 关闭应用程序

    2009-07-23 13:19:00
    方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Application类没有该方法,倒是一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多:在WPF应用程序的关闭ShutdownMode属性设置,具有3中枚举类型的值...
  • 完成一小项目,正常运行,测试环境Windows XP,Win 7,Win X64及SP版本,也是我客户端可能用到...请单击 确定 关闭应用程序。",问题发生毫无规律可寻,谷歌、百度无果 附谷歌、百度解决方案 1、DirectX问...
  • 下面完美小编就给大家带来几种关于Macbook怎么关闭后台程序的方法。 1、方法1: 我觉得最好得办法,按下快捷键:Command+Option+Esc来打开“强制退出应用程序”的窗口,然后选中你需要退出的...
  • 如何关闭应用程序

    2015-08-05 17:34:56
    在开发一个android应用软件时,考虑如何关闭应用程序的问题。一开始采用当前Activity调用finish()来完成,但这种做法是不对的。 对于finish()方法System.exit(0),android.os.Process.killProcess(android.os....
  • 不可否认,最常用的方法就是点右上角的红叉了,但是,还有其他一些技巧可以快速关闭程序。点右上角的红叉关闭,传统方式,简单、直观、易学程序本身设计关闭功能,一般可能显示为“关闭”、"退出“、“取消”等...
  • 应用程序的关闭

    2012-11-26 14:48:17
    应用程序的关闭 第一种方法:首先获取当前进程的id,然后杀死该进程。 (建议使用) android.os.Process.killProcess(android.os.Process.myPid()) 第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 ...
  • 对于一个应用程序可能很多个Activity,可能每个人并不想一个个关闭Activity,也可能忘了,那怎么关闭所有关闭的Activity呢,其实很多方法,但是我最喜欢一种就是通过广播事件去关闭,这样简单易懂,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,832
精华内容 732
关键字:

关闭应用程序的方法有