应用程序在使用Java登录时启动



所以我今天的问题是个人学术学习意愿,尽管这可能有点超出我的水平。请容忍我!

我做了一个简单的应用程序,可能看起来(也可能是)有点笨拙。它所做的只是打开一个窗口,让你按下一个按钮,关闭所述窗口。

以下是这个有问题的构造的代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class StartupLearning extends JFrame implements ActionListener {
private JButton button;
public StartupLearning() {
    super("If you see this box on startup, you've learned something new today!");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    button = new JButton("Close this box");
    button.addActionListener(this);
    button.setActionCommand("Close");
    add(button);
    pack();
}
@Override
public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    if (cmd.equals("Close"))
        dispose();
}
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new StartupLearning().setSize(400, 75);
        }
    });
}
}

我知道它并不完美,我知道它可能有可以优化和组织的缺陷,但正如前面提到的,这只是我试图教会自己一些新的东西。

现在,我想知道的是,当用户登录到Windows时,我可以使用什么代码,以及如何使用所述代码来运行这个非常简单的应用程序(如果这会使事情变得更加复杂,那么让我们不考虑跨平台)?

对于一个听起来像绿色的人来说,什么类或代码最适合这份工作,我如何将其与我提供的代码一起使用?

所需要做的就是,这个简单的代码需要在用户登录时运行,并在用户点击按钮时关闭。

编辑

感谢你们三位的回答,我显然还不够具体。我需要我漂亮的小代码在登录时运行,而不需要任何用户输入或移动文件。

该应用程序需要能够在用户启动一次后立即在启动时运行。

这意味着我会运行该应用程序,从现在起,它将始终在启动时运行,直到我删除该应用程序或在源代码中告诉它它将不再这样做。

EDIT2

你们能忍受我这么久真是太棒了。进一步澄清:

假设用户是管理员,并且没有密码或使用任何形式的保护。没有防病毒或反间谍软件或防火墙或任何东西。根本没有防御。

假设.jar文件和.class文件都在C:中。

假设应用程序将手动运行一次,然后在登录时启动。这是当应用程序有机会将自己添加到注册表或将.bat放入启动文件夹或其他位置时。

不要太担心道德问题,因为我只是想确定一个简单的Java应用程序如何在每次重新启动时自动启动。

我可以让应用程序在启动文件夹中放一个自己的快捷方式吗?

或者我可以让它在用户运行应用程序后将自己添加到注册表中吗?

我知道我问了很多,但我能做一个这样的演示吗?

你们是我的英雄。

登录时运行(手动)

打包应用程序后,您只需将java -jar your-app.jar放在Windows启动菜单中的.bat文件中即可。

如果你不想创建jar(例如,因为你的应用程序足够简单),并且总是假设你已经配置了Java环境变量(JAVA_HOMEPATH……),你可以直接运行你的字节码:

startup.bat:

cd your/app/bytecode/path
java yourapp

请参阅如何在启动时启动应用程序。

启动时运行(手动)

如果您需要应用程序在用户登录前运行,您可以使用Windows任务调度程序,并在启动时使用触发器,按照以下操作系统答案包装您的应用程序:

@echo off
REM Eventually change directory to the program directory 
cd C:UsersUser1DocumentsNetBeansProjectsFacebookdist
REM run the program
"C:Program FilesJavajdk1.7.0binjava.exe" -jar "C:UsersUser1DocumentsNetBeansProjectsFacebookdistFacebook.jar"

启动时运行(安装程序)

如果你真的不想要任何用户交互,我认为唯一简单(也是IMHO道德)的解决方案就是安装程序

您基本上需要一个向导来安装您的应用程序,以便您(和用户)将其配置为在启动时运行。有很多向导,你可以在这里建立自己的向导或开始你的研究。

启动时运行(独立)

使用这里描述的方法,直接在你的小应用程序中写这样的东西(这里的原始帖子):

static final String REG_ADD_CMD = "cmd /c reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "{0}" /d "{1}" /t REG_EXPAND_SZ";
private void exec(String[] args) throws Exception
{
    if (args.length != 2)
        throw new IllegalArgumentException("nnUsage: java SetEnv {key} {value}nn");
    String key = args[0];
    String value = args[1];
    String cmdLine = MessageFormat.format(REG_ADD_CMD, new Object[] { key, value });
    Runtime.getRuntime().exec(cmdLine);
}

Key是您的应用程序名称(不相关),Value是您的jar文件或运行应用程序的.bat命令(请参阅上面关于如何打包jar或在.bat文件中运行.class的方法),例如"C:UsersYourApp.jar"

注意

正如作者所说,这种方法应该适用于任何版本的Windows,因为它们都使用相同的StartupRun注册表项。不过,请记住,这是不可移植的,您可能需要根据MS OS版本调整脚本。

注2

在直接从应用程序修改注册表代码之前要三思而后行(hacky方法)。要做到这一点,您可能需要每次运行应用程序时都具有主管/管理员权限。此外,在没有正确、明确的用户提示的情况下这样做可能被视为恶意软件/垃圾邮件的恶意行为。

Window启动时有几个选项可以运行应用程序:

  1. 将应用程序的快捷方式放在启动目录中,请参阅此处。

  2. 设置一个java服务包装器,以便在Windows启动时启动java应用程序。

  3. 当Windows启动时,使用Windows中的任务计划程序执行java -jar yourfile.jar命令。

在所有这些选项中,启动目录将是最简单的选项,听起来它可以随心所欲。

编辑

按照您在编辑中描述的操作,您可能需要编辑注册表,将您的应用程序添加到启动时启动的应用程序列表中。

看看这里,了解一下如何做到这一点的一些细节。

本质上,您希望在HKCUSoftwareMicrosoftWindowsCurrentVersionRun<YourKeyAsAString>向注册表添加一个条目,该条目的值作为应用程序的路径。

正如RobF所说,您可以在启动目录中创建一个快捷方式。您还可以创建一个注册表项,请参阅此处。

相关内容

  • 没有找到相关文章

最新更新