所以我今天的问题是个人学习的意愿之一,尽管这可能超出我的水平。忍受我吧!
我做了一个简单的应用程序,看起来(可能是)有些笨拙。它所做的只是打开一个窗口,然后按一下按钮来关闭所说的窗口。
这是此可疑结构的代码:
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_HOME
,PATH
....),则可以直接运行您的字节码:
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] 删除。
我来说两句