Java论坛网»Java技术»请教如何用java实现所谓的“只运行一个实例”
请教如何用java实现所谓的“只运行一个实例”
问?:
很多软件,只能打开一次,就像金山词霸一样,在《金山词霸》已经运行了的情况下,再次点击《金山词霸》的图标,那么它不会再运行另外一个《金山词霸》,而是将已有的《金山词霸》给激活,始终只能运行一个《金山词霸》的实例。
我想请教java如何具体实现这样的功能,麻烦各位大侠详细指教下,小弟初学java。
我想请教java如何具体实现这样的功能,麻烦各位大侠详细指教下,小弟初学java。
答!: 1:
找一个公共变量标记一下不就得了,比如放到文件里,放到数据库里,放到注册表里.不晓得能不能管理内存
答!: 2:
public class A{
private static A _instance = null;
public synchronized static A getInstance()
{
if (_instance == null)
{
_instance = new A();
}
return _instance;
}
}
使用A的对象时不用new,用A.getInstance();
private static A _instance = null;
public synchronized static A getInstance()
{
if (_instance == null)
{
_instance = new A();
}
return _instance;
}
}
使用A的对象时不用new,用A.getInstance();
答!: 3:
楼上不对,这个是进程的问题,而不是线程,
可以用绑定端口,FileLock对某个文件进行加锁,或者jni(windows的FindWindow)来检查是不是已经启动。
好像1.4的Pref也可以(通过写入注册表某项值,这个我没有试过)。
可以用绑定端口,FileLock对某个文件进行加锁,或者jni(windows的FindWindow)来检查是不是已经启动。
好像1.4的Pref也可以(通过写入注册表某项值,这个我没有试过)。
答!: 4:
楼上的能详细给出个示例吗?
答!: 5:
这么写就可以了:
import java.net.*;
public class InstanceControl extends Thread {
public void run() {
try{
Socket client = new Socket("127.0.0.1", 22222);//创建socket,连接22222端口
System.exit(0); //连接成功,说明有实例存在,则退出
}catch (Exception e){ }
try{
ServerSocket server = new ServerSocket(22222);//创建socket,连接22222端口
while (true)
{
server.accept(); //接受连接请求
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}
import javax.swing.*;
public class ProgramMain{
public static void main(String argv[])
{
InstanceControl ic = new InstanceControl();
ic.start();
JFrame frame = new JFrame("只能运行一个");
frame.setVisible(true);
}
}
上面只是个例子,如果真是用JFrame,记得在窗口退出事件中写System.exit(0)
import java.net.*;
public class InstanceControl extends Thread {
public void run() {
try{
Socket client = new Socket("127.0.0.1", 22222);//创建socket,连接22222端口
System.exit(0); //连接成功,说明有实例存在,则退出
}catch (Exception e){ }
try{
ServerSocket server = new ServerSocket(22222);//创建socket,连接22222端口
while (true)
{
server.accept(); //接受连接请求
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}
import javax.swing.*;
public class ProgramMain{
public static void main(String argv[])
{
InstanceControl ic = new InstanceControl();
ic.start();
JFrame frame = new JFrame("只能运行一个");
frame.setVisible(true);
}
}
上面只是个例子,如果真是用JFrame,记得在窗口退出事件中写System.exit(0)
答!: 6:
这个 问题是老板键的一个解决方法
答!: 7:
晕菜使用开端口的方法解决
也不错
不过还是建议使用数据库的方式解决
-------------------------
做个静态的接口
里面放置一个Vector,然后启动后放置一个数据
在启动实例只要判断里面是不是为空就可以
------------------------------
简单解决:0
也不错
不过还是建议使用数据库的方式解决
-------------------------
做个静态的接口
里面放置一个Vector,然后启动后放置一个数据
在启动实例只要判断里面是不是为空就可以
------------------------------
简单解决:0
相关JAVA教程:
java转码的时候一个很奇怪的现象!!!!!!
Spring初学者问题
struts+Hibernate开发产生异常--忘指教
j2ee中的pointbase问题!!!!!
JBOSS安装失败是什么原因,J2EE高手来看下
webservice 复杂参数传递的问题!
java打印图像 图像变大了
hibernate小问题
想转行,大家给点意见
有关于通用查询,想了很久,但没有想通,大家进来讨论讨论(Hibernate)
Axis的Handler问题。
Struts框架下如何在jsp中显示数据库中查询到的数据?