应用程序从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时运行(如果可以使跨平台运行,请不要使用跨平台)更复杂)?

对于听起来有些绿的人来说,什么类或代码最适合此工作,以及如何在显示的代码中使用它?

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

编辑

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

用户启动一次后,该应用程序必须能够在启动时运行。

这意味着我将运行该应用程序,从现在开始,它将始终在启动时运行,直到我删除该应用程序或在源中告诉它不再使用该应用程序为止。

编辑2

你们和我这么长时间在一起真是太棒了。为了进一步澄清:

假设用户是管理员,并且没有密码或使用任何形式的保护。没有防病毒,防间谍软件,防火墙或任何其他工具。完全没有防御。

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

假设应用程序将在预期开始登录之前手动运行一次。这是应用程序有机会将其自身添加到注册表或将其.bat放入启动文件夹之类的时候。

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

也许我可以让应用程序将其自身的快捷方式放在启动文件夹中?

还是在用户运行应用程序后将其添加到注册表中?

我知道我要问很多,但是我可以示范一下吗?

你们是我的英雄

亚历克斯·吉丹

登录时运行(手动)

一旦你打包你的应用程序,你可以把java -jar your-app.jar一个.bat在Windows文件启动菜单。

如果您不想创建一个jar(例如,因为您的应用程序很简单),并且始终假设已配置Java环境变量(JAVA_HOMEPATH....),则可以直接运行您的字节码:

startup.bat

cd your/app/bytecode/path
java yourapp

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

在启动时运行(手动)

如果您需要在用户登录之前运行该应用程序,则可以使用Windows Task Scheduler,并在启动时使用触发器以下操作系统答案所述将应用程序包装起来

@echo off
REM Eventually change directory to the program directory 
cd C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\
REM run the program
"C:\Program Files\Java\jdk1.7.0\bin\java.exe" -jar "C:\Users\User1\Documents\NetBeansProjects\Facebook\dist\Facebook.jar"

在启动时运行(安装程序)

万一您真的不希望任何用户交互,我想象的唯一简单(和IMHO道德)解决方案就是Installer

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

在启动时运行(独立)

使用此处描述的方法,在您的小型应用程序中直接编写类似这样的内容(此处为原始文章):

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("\n\nUsage: java SetEnv {key} {value}\n\n");

    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:\Users\YourApp.jar"

笔记

如作者所述,这种方法适用于任何版本的Windows,因为它们都使用相同的Startup\Run注册表项。但是,请记住,这不是可移植的,您可能必须根据MS OS版本调整脚本。

笔记2

在直接从您的应用程序修改注册表代码之前,请三思(hacky方式)。为此,您可能在每次运行应用程序时需要Supervisor / Admin权限此外,如果这样做不正确,则可以将明确的用户提示视为恶意软件/垃圾邮件恶意行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章