首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

如果在java中判断只允许一个当前进程运行?解决方法

2012-01-31 
如果在java中判断只允许一个当前进程运行?平台是linux,有没有比较好的实现,我想到的一些办法都有不太好的

如果在java中判断只允许一个当前进程运行?
平台是linux,有没有比较好的实现,我想到的一些办法都有不太好的缺点。

[解决办法]
不如先说说你的办法?
[解决办法]
单例模式~
[解决办法]
关注
[解决办法]
1. 什么叫做“判断只允许一个当前进程运行”呢?程序是你写的,你不去创建新的进程不就可以了吗?

2. 既然是 Java 程序,那么 Linux 与否有什么关系?
[解决办法]
借鉴多进程编程中临界区的概念,如果有多个进程进入设立的临界区,就让大于1的退出.
例如:
这个临界区是一个文件,你往里面写个字符,如果下一个进程发现里面有字符,就退出.
[解决办法]
窗体是JBUILDER声称的,如果你觉得事件那部分不好你可以改,不过思路还是LS的思路
import javax.swing.JFrame;
import java.awt.event.*;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import javax.swing.JOptionPane;
import java.io.*;

/**
* <p> Title: </p>
* <p> Description: </p>
* <p> Copyright: Copyright (c) 2007 </p>
* <p> Company: </p>
* @author not attributable
* @version 1.0
*/

public class only extends JFrame {
public only() {
try {
jbInit();
this.setSize(400,300);
this.show();
boolean ff=this.ifopen();

if (ff==false)
{
this.setopen();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
only only1 = new only();
}
private void jbInit() throws Exception {
this.addWindowListener(new only_this_windowAdapter(this));
}

void this_windowClosing(WindowEvent e) {
this.setclose();
System.exit(0);
}

//设置标实为N
public void setclose(){
try {
File f1 = new File( " ");
String path = f1.getAbsolutePath();
System.out.println(path);

FileWriter ff = new FileWriter(path + "\\classes\\check.ini ");
ff.write( "N ");
ff.close();
}
catch (Exception ex) {
System.out.println(ex);
}
}

//设置标实为Y
public void setopen(){
try {
File f1 = new File( " ");
String path = f1.getAbsolutePath();
System.out.println(path);

FileWriter ff = new FileWriter(path + "\\classes\\check.ini ");
ff.write( "Y ");
ff.close();
}
catch (Exception ex) {
System.out.println(ex);
}
}

//判断是否存在文件且信息标实为Y
public boolean ifopen(){
boolean f=false;

try{
File f1=new File( " ");
String path=f1.getAbsolutePath();
System.out.println(path);
FileReader ff=new FileReader(path+ "\\classes\\check.ini ");
BufferedReader in=new BufferedReader(ff);
String s=null;

while ((s=in.readLine())!=null)
{
if (s.equals( "Y "))
{
JOptionPane.showMessageDialog(this, "您已经打开一个窗口了! ", "信息 ",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
}catch(Exception e){
System.out.println(e);
}
return f;


}

}

class only_this_windowAdapter extends java.awt.event.WindowAdapter {
only adaptee;

only_this_windowAdapter(only adaptee) {
this.adaptee = adaptee;
}
public void windowClosing(WindowEvent e) {
adaptee.this_windowClosing(e);
}
}
[解决办法]
如你用了Java6.命令行直接运行
jps -l

就可打印出机器上所运行的Java进程ID号及运行主类.

___________________ www.NetJava.cn 领先的.Net&Java技术推广者.___


[解决办法]
JAVA6 越来越强大了阿
[解决办法]
文件锁

eclipse 就是这么做的 把一个文件锁起来 不让别的程序读写
启动的时候去读这个文件 如果失败 则有一个存在


[解决办法]
java 交流群:36468871 高手请进!
[解决办法]
如 insiku(tmd 结帖啊!!!) 所说,用文件锁是一个比较好的做法,进程异常中止也能释放锁
File file = new File(path);
RandomAccessFile raf = new RandomAccessFile(file, "rw ");
FileChannel fc = raf.getChannel();
FileLock lock = fc.tryLock(0, 1, false);
if (lock == null) {
System.out.println( "已有一个实例在运行 ");
System.exit(0);
}
...

热点排行