请求:
这是Java开发人员在我的语言环境中面临的一个非常普遍的问题。我真的为此困扰了很多天。搜索并尝试了很多,阅读文档。阅读与JavaExe相关的所有stackoverflow问题。请仅在您之前做过类似的事情并且有完整的答案时回复。我将非常感谢社区!
Senario:
我正在使用 JavaExe 在桌面交互式功能中作为系统服务运行应用程序。
确切地说,我有一个应用程序捕获桌面的屏幕截图。我希望它在上以任何用户登录的身份运行(作为管理员),因此没有人可以阻止它。
我有一个myapp.jar,settings.txt和一个lib目录。
我已经大量搜索并发现JavaExe可以工作(通过观看其示例)
如果有人有更好的方法。请说明。
问题:
根据我的研究,
"RunType = 1"
。 serviceInit()
我是否需要放置任何类或参考/导入?怎么样?
编辑:
我在下面的代码可以将用作独立的 .jar,也可以在javaExe.exe中使用。
现在确实制作了系统服务,并由系统用户运行。但是与桌面不交互。即它不显示任何GUI。
package temp;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public class Temp {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
serviceInit();
}
public static boolean serviceInit(){
new Thread(){
public void run(){
Integer i = 0;
while(i < 999999999){
JOptionPane.showMessageDialog(null,i);
i++;
}
}
}.start();
return true;
}
}
而且我不认为可以将.jar,lib目录和settings.txt捆绑到一个.exe中吗?
最佳答案
您应该有以下情况:
public class MyApp_ServiceManagement
{
static boolean isMsgToDisplay = false;
/////////////////////////////
public static boolean serviceInit()
{
(new Thread()
{
public void run()
{
for(int i=0;i < 6;i++)
{
try { sleep(5*1000); }
catch(Exception ex) {}
isMsgToDisplay = true;
}
}
}).start();
return true;
}
/// is Data ready to be send to the UI ?
public static boolean serviceIsDataForUI()
{
return isMsgToDisplay;
}
/// Data to be send to the UI
public static Serializable serviceDataForUI()
{
isMsgToDisplay = false;
return "hello, I am an interactive Service";
}
}
对于UI部分:
public class MyApp_TaskbarManagement
{
/// To show (or not) the icon in tray
public static boolean taskIsShow()
{
return false;
}
/// Receive the message from Service
public static void taskDataFromService(Serializable data)
{
JOptionPane.showMessageDialog(null, data);
}
/// descr of UI
public static String[] taskGetInfo()
{
return new String[]
{
"UI part of Service"
};
}
}