请问如何做到只允许一个实例运行? 如题,因开发需要实现该功能,还请高手多指点一二。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 singleton patternClass MyClass{ private static MyClass instace; private MyClass(){ } public static MyClass getInstance(){ if(instance==null) instance= new MyClass(); return instance; }} 谢谢,我已经用了单态模式 代码如下,public class MainWnd { private static MainWnd mainWnd=new MainWnd(); private MainWnd(){ ...... } public static MainWnd getInstance(){ return mainWnd; }}调用的代码:public class Run1 { public static void main(String[] args) { MainWnd main1=MainWnd.getInstance(); }}public class Run2 { public static void main(String[] args) { MainWnd main2=MainWnd.getInstance(); }}执行Run1、Run2后,系统还是会弹出两个应用程序的窗口,请问怎么才能只允许一个窗口弹出呢?(vb中好像是查看是否有进程执行,不知道java中该怎么实现阿?) 执行run1时打开一个端口,执行run2检测端口是否打开,通过端口占用来判断 两个main,是在两个classloader中,当然有两个窗口.单态模式是指的在一个jvm中 to lcllcl987(毛爷爷) 那请问要怎么才能实现这个效果?to killme2008(为了生态平衡,请保护蛤蟆) 你说要打开一个端口,能说得具体点吗? 没一个正确的socketserver sc=new socketserver(port);下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以 在我看来,搂主加载这两个类的时候,系统启动两个jvm实例,实际上是两个内存空间,通过单例模式得到的对象实际在两个jvm实例堆中都存在,也就是说,虽然单例模式,但是由于不在同一个jvm实例中,还是会存在两个实例。不管采用什么方式,都涉及jvm之间通信问题,由于应用层都不能确信对方已经加载,可能的方式就是通过在第三方注册自己或者持有第三方资源锁,另一个jvm实例加载的时候才能知道是否对方知道,才可以决定是否加载类。通过对端口的占用判断确实是个比较好的办法,端口应该也算是系统共享的资源吧,一旦一个jvm实例占用这个端口,另一个jvm加载时就可以检测到资源被占用。 用FileLock也行.原理如同阁层楼上. Sprite_bei:没一个正确的socketserver sc=new socketserver(port);下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以======================================================================================为什么不能使用锁文件?许多程序都是用锁文件啊,visual age for java, netbeans, eclipse都是使用锁文件。 呵呵,看不出更高明的地方。难道port不是全局可访问的资源,何况如果网络没有配置,方法会抛出Exception(我是这样猜想,虽然TCP/IP几乎是标准,但并不排除没有socket的可能) 基本思路是在程序目录下放一个空文件,程序启动的时候就取得该文件的文件锁,能取到就继续运行,取不到就退出,用单实例是没用的,没起一个程序都启了一个JVM,单实例只对同一JVM内的有效 楼主可以看一下这个帖子:)http://community.csdn.net/Expert/topic/5370/5370302.xml?temp=.2584192希望对你有所帮助! 关于JNDI配置的 谁能用Java知识给我解释一下这一句呢? 下面的程序程序哪个方法体先执行?m1还是m2?高手分析一下好吗?进来看看 validator验证问题,十分急,分不够立刻加!!!! 关于一组字符串排序的问题~~~~ 个 连接SQLServer2000的问题 关于事件处理的问题(鼠标和窗口) 有谁能讲讲JAVA的运行机制? 使用组函数查询得到的结果集不为空? 学JAVA,应该选些什么书? 救助一个简单的java问题
private MyClass(){ }
public static MyClass getInstance(){
if(instance==null)
instance= new MyClass();
return instance;
}
}
public class MainWnd {
private static MainWnd mainWnd=new MainWnd();
private MainWnd(){
......
}
public static MainWnd getInstance(){
return mainWnd;
}
}调用的代码:
public class Run1 {
public static void main(String[] args) {
MainWnd main1=MainWnd.getInstance();
}}public class Run2 {
public static void main(String[] args) {
MainWnd main2=MainWnd.getInstance();
}}
执行Run1、Run2后,系统还是会弹出两个应用程序的窗口,请问怎么才能只允许一个窗口弹出呢?(vb中好像是查看是否有进程执行,不知道java中该怎么实现阿?)
单态模式是指的在一个jvm中
lcllcl987(毛爷爷) 那请问要怎么才能实现这个效果?to killme2008(为了生态平衡,请保护蛤蟆) 你说要打开一个端口,能说得具体点吗?
socketserver sc=new socketserver(port);
下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以
socketserver sc=new socketserver(port);
下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以
======================================================================================
为什么不能使用锁文件?许多程序都是用锁文件啊,visual age for java, netbeans, eclipse都是使用锁文件。