windows应用程序在使用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应用程序如何在每次重新启动时自动启动
我是否可以让应用程序在启动文件夹中放置自己的快捷方式
或者我可以在用户运行应用程序后将其自身添加到注册表中吗
我知道我的要求很高,但我能演示一下这样的东西吗
你们是我的英雄
# 1 楼答案
登录时运行(手动)
打包应用程序后,您可以将
java -jar your-app.jar
放入Windows启动菜单中的.bat
文件中如果你不想创建一个
jar
(例如,因为你的应用程序足够简单),并且总是假设你已经配置了Java环境变量(JAVA_HOME
,PATH
),您可以直接运行字节码:startup.bat
请参阅here如何在启动时启动应用程序
启动时运行(手动)
如果您需要在用户登录之前运行应用程序,您可以使用Windows任务计划程序,并在启动时使用触发器,按照thisOS答案中的描述包装应用程序:
启动时运行(安装程序)
如果你真的不想要任何用户交互,我想唯一简单的解决方案就是安装程序
基本上,你需要一个向导来安装你的应用程序,让你(和用户)配置它在启动时运行。有很多向导,你可以建立自己的或开始你的研究看看here
启动时运行(独立)
使用here描述的方法,直接在小型应用程序中编写类似的内容(原始帖子here):
Key
是你的应用程序名(不相关),Value
是你的jar文件或。运行应用程序的bat命令(请参阅上面关于如何在.bat文件中打包jar或运行.class的方法),例如"C:\Users\YourApp.jar"
注意
正如作者所说,这种方法应该适用于任何版本的Windows,因为它们都使用相同的
Startup\Run
注册表项。不过,请记住,这是不可移植的,您可能需要根据MS OS版本调整脚本注2
在直接从应用程序修改注册表代码之前,要三思而后行(hacky方法)。要做到这一点,您可能需要在应用程序每次运行时都获得主管/管理员权限。此外,在没有正确、明确的用户提示的情况下这样做可能被视为恶意软件/垃圾邮件恶意行为
# 2 楼答案
正如罗布所说,你可以在启动目录中创建一个快捷方式。还可以创建注册表项,请参见here
# 3 楼答案
当窗口启动时,有几个选项可以运行应用程序:
在启动目录see here中放置应用程序的快捷方式
安装java服务包装器,以便在Windows启动时启动java应用程序
Windows启动时,使用Windows中的任务计划程序执行
java -jar yourfile.jar
命令在所有这些选项中,startup目录是最简单的选项,听起来它可以做你想做的事情
编辑
按照编辑中的描述,您可能需要编辑注册表,将应用程序添加到启动时启动的应用程序列表中
看看here了解一些关于如何做到这一点的细节
本质上,您希望在
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<YourKeyAsAString>
的注册表中添加一个条目,该值作为应用程序的路径