Java(TM)Platform SE二进制文件仍在进程上运行

时间:2018-03-14 03:40:42

标签: java selenium taskscheduler

我使用Java创建了一个控制台应用程序,然后将其导出为可运行的JAR文件。但是,当我运行JAR文件时,自动化已完成,但“Java(TM)Platform SE二进制文件”仍在后台,我试图放置System.exit(0)但仍然无法终止过程

我也试图在每15分钟无限期重复一次在任务计划程序中自动运行,问题是自“Java(TM)Platform SE二进制文件” 15分钟后它将无法再次运行>仍在进行中,并将其状态确定为正在运行。

我非常确定我的所有自动化任务都已完成,没有错误,也没有创建另一个线程。

以下是我的代码:

public static void main(String[] args) {
    String jarName = new File(Selenium.class.getProtectionDomain().getCodeSource().getLocation().getPath())
        .getName();
    System.out.println("Running " + jarName + " Automation");
    if (args.length >= 1 && args[0].toLowerCase().equals("-run")) {
        for (int i = 1; i < args.length; i++) {
            String pram = args[i].replace(jarName + "_", "");
            if (pram.toLowerCase().equals("all")) {
                GFC.execute("Login");
                GFC.execute("SwitchIntegration");
                GFC.execute("BODActivate");
                GFC.execute("Users");
                GFC.execute("Settings");
                GFC.execute("AccountingEntityRegistration");
                GFC.execute("CustomizedData");
                GFC.execute("BOD");
                GFC.execute("BODAttributesMDM");
                GFC.execute("BODAttributesTransactional");
                GFC.execute("CMD");
                GFC.execute("CMDAttributes");
                GFC.execute("CMDDataEntry");
                GFC.execute("CMDActivate");
                GFC.execute("AccountingEntity");
                GFC.execute("AccountingEntityMapping");
                GFC.execute("JETemplates");
                GFC.execute("Scenarios");
                GFC.execute("Rules");
                GFC.execute("RulesScript").quit();
            } else {
                if (!pram.equals("Login")) {
                    GFC.execute("Login");
                }
                GFC.execute(pram).quit();
            }
        }

        if (Boolean.parseBoolean(infor.automation.utils.Properties.get("gfc.enableemailer"))) {
            sendEmail();
        }
    }
}

更新: 3/14/2018

  • 担心我的自动化会创建另一个线程,所以我决定 创建一个新项目,只是一个主类,并将其导出为 可运行的Jar文件,它仍然是相同的。
  • 我的JDK版本是1.8

1 个答案:

答案 0 :(得分:0)

我制定了解决方法或解决方案。我发现main上的System.exit(0)只会关闭控制台应用程序,但&#34; Java(TM)Platform SE二进制文件&#34; 将保留。为了终止这一点,我扩展到JFrame类,以便能够覆盖ExitApp()。在ExitApp()我添加了一个窗口监听器,在windowClosing()内,我再次呼叫了disposed()System.exit(0)。我不知道这是如何运作的。如果有人知道这是如何工作的,请随时更新这个答案。

public class TestClass extends JFrame {

    public void ExitApp() {
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                // Dispose Java (TM) Platform SE binary.
                dispose();
                // Close the Java.exe I'm not sure.
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        // Close Your Application Trigger ExitApp();
        System.exit(0);
    }
}