日期:2014-05-20  浏览次数:20776 次

如果在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;