所以今天我的问题是个人学术上的学习意愿,尽管它可能有点超出我的水平。请耐心等待我!
我做了一个简单的应用程序,可能看起来(也可能是)有点笨重。它所做的只是打开一个窗口,按下按钮,关闭所述窗口。
这是这个有问题的构造的代码:
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应用程序如何在每次重启时自行启动。
我是否可以让应用程序在启动文件夹中放置一个自己的快捷方式?
或者我可以在用户运行应用程序后将其添加到注册表中吗?
我知道我问了很多,但我可以演示这样的事吗?
你们是我的英雄。
答案 0 :(得分:3)
打包应用后,您只需将java -jar your-app.jar
放入Windows 启动菜单中的.bat
文件中即可。
如果您不想创建jar
(例如,因为您的应用程序足够简单)并始终假设您已配置Java环境变量(JAVA_HOME
,PATH
.. ..),你可以直接运行你的字节码:
startup.bat
:
cd your/app/bytecode/path
java yourapp
请参阅here如何在启动时启动应用。
如果您需要应用程序在用户登录之前运行,您可以使用 Windows任务计划程序,并在启动时使用触发器 ,按照this操作系统答案:
中的说明包装您的应用程序@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"
如果你真的不想要任何用户交互,我想象的唯一简单(和恕我直言)的解决方案是安装程序。
您基本上需要一个为您(以及用户)安装应用程序的向导,将其配置为在启动时运行。有许多向导,您可以自己构建或开始研究here。
使用here描述的方法,在您的小型应用程序中直接写这样的内容(原始帖子here):
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或运行.class的方法)在.bat文件中),例如"C:\Users\YourApp.jar"
注意
正如作者所说,这种方法应该适用于任何版本的Windows,因为它们都使用相同的Startup\Run
注册表项。但是,请记住,这不是可移植的,您可能需要根据MS OS版本调整脚本。
注2
在直接从应用程序修改注册表代码之前请三思而后行( hacky 方式)。为此,您可能需要Supervisor / Admin权限应用程序运行的每个时间。此外,如果没有正确的,明确的用户提示可以被视为恶意软件/垃圾邮件恶意行为。
答案 1 :(得分:2)
Window启动时,有几个选项可以运行您的应用程序:
在启动目录see here中放置应用程序的快捷方式。
设置java服务包装器以在Windows启动时启动Java应用程序。
使用Windows中的任务计划程序在Windows启动时执行java -jar yourfile.jar
命令。
在所有这些选项中,启动目录将是最简单的选项,听起来它会做你想要的。
修改强>
执行编辑中描述的内容,您可能需要编辑注册表以将应用程序添加到启动时启动的应用程序列表中。
请查看here,了解有关如何执行此操作的详细信息。
实际上,您希望在HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<YourKeyAsAString>
处向注册表添加一个条目,并将值作为应用程序的路径。
答案 2 :(得分:0)
正如RobF所说,您可以在Startup目录中创建一个快捷方式。您还可以创建一个注册表项,请参阅here。