模仿C++唯一实例实现
来源:互联网 发布:bootstrap modal.js 编辑:程序博客网 时间:2024/05/21 18:17
JAVA是平台无关的,这也就决定了它不能太深地涉及OS的底层。如果说JAVA有缺点,那么就是在这里了。但是在某些情况下我们又不得不要操作一些系统的底层,JAVA在这方面给我们造成了很大的不便。尽管现在有很多的开源项目可以实现一些平台底层的功能,如JDIC(现在已经大部分被吸收到JDK当中来) 等,但不能完全满足我们的要求,况且这像是一个大菜市场:得靠自己选。
很多情况我们需要在一个OS中只有一个实例运行,可是又不能像C++一样写内存标志,怎么办呢?以前我想过很多办法:注册系统标志、建立标志文件等等很多手段,要么实现复杂要么不稳定,比如建立标志文件:如果JVM被不正常终止或者OS断电等情况,临时文件没有被删除,下次启动程序时就会误以为已经有程序在运行而退出。突然想出来一个办法,实现起来很简单,而且几乎没有哪一个OS不支持的:那就是网络资源。
任意一个网络端口在OS当中总是唯一的,我们从这一点入手。如果有端口被监听,如果再去监听它,那么一定会失败。可是有时候并不是被这个程序监听呢?麻烦就来了。我们总会有办法:可以监听多个端口,只要有一个端口是可以用的,说明该程序还没有被运行。在程序的入口切入如下代码:
好啦,运行一个实例就实现了,你试试吧!
很多情况我们需要在一个OS中只有一个实例运行,可是又不能像C++一样写内存标志,怎么办呢?以前我想过很多办法:注册系统标志、建立标志文件等等很多手段,要么实现复杂要么不稳定,比如建立标志文件:如果JVM被不正常终止或者OS断电等情况,临时文件没有被删除,下次启动程序时就会误以为已经有程序在运行而退出。突然想出来一个办法,实现起来很简单,而且几乎没有哪一个OS不支持的:那就是网络资源。
任意一个网络端口在OS当中总是唯一的,我们从这一点入手。如果有端口被监听,如果再去监听它,那么一定会失败。可是有时候并不是被这个程序监听呢?麻烦就来了。我们总会有办法:可以监听多个端口,只要有一个端口是可以用的,说明该程序还没有被运行。在程序的入口切入如下代码:
import javax.swing.*;
import java.net.*;
public class test
{
public static void main(String[] args)
{
boolean isRun=true;
//判断是否已有实例运行
try{
ServerSocket s2=new ServerSocket(60121);
isRun=false;
}
catch(Exception ex)
{
isRun=isRun||true;
}
//第二次判断 并且可以如此下去 但是会造成不必要的资源浪费 建议监听两个端口即可 而且端口尽量设大一点。
try{
ServerSocket s1=new ServerSocket(60122);
isRun=false;
}
catch(Exception ex)
{
isRun=isRun||true;
}
if(isRun) //如果已有实例在运行
{
JOptionPane.showMessageDialog(null,"已经有一个实例正在运行!","运行失败",JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
else
{
System.out.println("这里是程序的运行主体。");
}
}
}
import java.net.*;
public class test
{
public static void main(String[] args)
{
boolean isRun=true;
//判断是否已有实例运行
try{
ServerSocket s2=new ServerSocket(60121);
isRun=false;
}
catch(Exception ex)
{
isRun=isRun||true;
}
//第二次判断 并且可以如此下去 但是会造成不必要的资源浪费 建议监听两个端口即可 而且端口尽量设大一点。
try{
ServerSocket s1=new ServerSocket(60122);
isRun=false;
}
catch(Exception ex)
{
isRun=isRun||true;
}
if(isRun) //如果已有实例在运行
{
JOptionPane.showMessageDialog(null,"已经有一个实例正在运行!","运行失败",JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
else
{
System.out.println("这里是程序的运行主体。");
}
}
}
好啦,运行一个实例就实现了,你试试吧!
- 模仿C++唯一实例实现
- C#--应用程序唯一运行实例C#代码实现
- 实现程序唯一实例运行
- C 语言模仿实现HashTable
- 唯一实例
- 唯一实例。
- 元素唯一性问题(C实现)
- #android 利用fragment实现模仿微信的实例
- c/c++ 确保程序只有唯一的实例
- 通过SDK函数实现WIN32应用程序的唯一实例。
- 基于.Net平台应用程序唯一运行实例实现
- 基于.Net平台应用程序唯一运行实例实现
- 基于.Net平台应用程序唯一运行实例实现
- 基于.Net平台应用程序唯一运行实例C#代码实现
- 基于.Net平台应用程序唯一运行实例实现
- 基于.Net平台应用程序唯一运行实例实现(一)
- 基于.Net平台应用程序唯一运行实例实现(二)
- 在VC++实现控制程序只运行唯一一个实例
- 绝句。。。。
- 态度决定一切
- opengl学习随笔2
- 5月26日北京开源沙龙活动通知
- 三种线程池比较
- 模仿C++唯一实例实现
- opengl学习随笔1
- CRM
- “这么多杀毒软件,倒底哪个好呢?”不要问这么无聊的问题了。
- 数据库引擎
- 动态分配二位数组
- java对properties文件的操作
- 准备出手买基金的感想与计划
- “我最近想给电脑升级,现在什么配置的比较好”不要问这么无聊的问题了!