当前位置: 首页 > 面试题库 >

JavaExe和Java应用程序作为Windows系统服务与桌面交互

贲培
2023-03-14
问题内容

请求:

这是Java开发人员在我的语言环境中面临的一个非常普遍的问题。我真的为此困扰了很多天。搜索并尝试了很多,阅读文档。阅读与JavaExe相关的所有stackoverflow问题。请仅在您之前做过类似的事情并且有完整的答案时回复。我将非常感谢社区!

Senario:

我正在使用 JavaExe* 在桌面 交互 功能中将应用程序作为 系统服务 运行。确切地说,我有一个 捕获桌面截图
的应用程序。我希望它能以 任何用户登录以admin身份 )运行 因此没有人可以阻止它。
*

我有一个myapp.jar,settings.txt和一个lib目录。

我已经大量搜索并发现JavaExe可以工作(通过观看其示例)

如果有人有更好的方法。请说明。

问题:

根据我的研究,

  1. 您必须创建一个命名为.exe的.properties文件,并将其写入"RunType = 1"

  2. 您可以在主类中定义一个静态方法: serviceInit()

我是否需要放置任何类或参考/导入?怎么样?

编辑:

我下面的代码也 可以 作为独立的 .jar和javaExe.exe使用

现在 确实提供了系统服务, 并以 SYSTEM 用户身份运行。但是它 与桌面不是交互式的 。即它不显示任何GUI。

package temp;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;


public class Temp {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {


          serviceInit();

    }

    public static boolean serviceInit(){

        new Thread(){
            public void run(){
                Integer i = 0;
                while(i < 999999999){
                    JOptionPane.showMessageDialog(null,i);
                    i++;

                }
            }
        }.start();

        return true;
   }




}

而且我不认为可以将.jar,lib目录和settings.txt捆绑到一个.exe中吗?


问题答案:

您应该有以下情况:

public class MyApp_ServiceManagement
{
    static boolean isMsgToDisplay = false;

    /////////////////////////////
    public static boolean serviceInit()
    {
        (new Thread()
        {
            public void run()
            {
                for(int i=0;i < 6;i++)
                {
                     try { sleep(5*1000); }
                     catch(Exception ex) {}

                     isMsgToDisplay = true;
                }
            }
        }).start();

        return true;
    }

    /// is Data ready to be send to the UI ?
    public static boolean serviceIsDataForUI()
    {
        return isMsgToDisplay;
    }

    /// Data to be send to the UI
    public static Serializable serviceDataForUI()
    {
        isMsgToDisplay = false;
        return "hello, I am an interactive Service";
    }
}

对于UI部分:

public class MyApp_TaskbarManagement
{
    /// To show (or not) the icon in tray
    public static boolean taskIsShow()
    {
        return false;
    }

    /// Receive the message from Service
    public static void taskDataFromService(Serializable data)
    {
        JOptionPane.showMessageDialog(null, data);
    }

    /// descr of UI
    public static String[] taskGetInfo()
    {
        return new String[]
            {
                "UI part of Service"
            };
    }
}


 类似资料:
  • 问题内容: 我已按照本指南在Windows 8上将jenkins从站安装为服务: https://wiki.jenkins- ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service#InstallingJenkinsasaWindowsservice- InstallSlaveasaWindowsservice%28requir

  • 我目前正在从事一个Java桌面应用程序项目。这是一个现有的应用程序,我被要求修改它。 他们说我必须使用RESTful Web服务将数据从桌面应用程序发送到Web应用程序。所以我搜索了一些关于RESTful Web服务的信息(因为我对那类东西不熟悉,对Java也不熟悉),我看到一些使用RESTful Web服务的非Web应用程序,但非Web应用程序是Maven项目。我需要修改的现有java桌面应用程

  • 下载应用程序、共享文件、查找字体和库存图片等 — 全部通过 Creative Cloud 桌面应用程序完成。 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 注意:在您安装 Creative Cloud 桌面应用程序的过程中,本文中介绍的某些选项卡可能不可用。 Adobe Creative Cloud 桌面应用程序可供您

  • 问题内容: 我正在使用Eclipse SWT库进行GUI渲染,用Java为桌面编写一个应用程序。我认为SWT帮助Java克服了在桌面上接受的最大障碍:即为Java应用程序提供一致的,响应式的界面,该界面看起来与桌面上其他任何应用程序的界面都一样。但是,我觉得打包应用程序仍然是一个问题。 OS X本机提供了一种将Java应用程序包装在本机应用程序包中的简便机制,但是为Windows / Linux生

  • 谢谢你的帮助, 卢卡斯

  • 我知道这个问题已经被问过很多次了,一直都有一个答案是关于使用一个可执行的jar或制作一个。exe使用launch4j或类似应用程序。 我可能听起来像个新手,实际上我是。 我一直在用一个Java项目尝试一些东西。我已经成功地制作了一个可执行的jar和一个. exe文件。这都要归功于你之前在SO中的回答:) 但是,我想为Windows创建一个安装程序。例如,按Next 2-3次(显示所有条款和条件等)