1. 通过数据库控制。
2. 通过socket控制,占用一个端口。不知道有没有更好的方法。

解决方案 »

  1.   

    j2se1.4中的java.nio.channel.FileLock可以解决你的问题。
      

  2.   

    设置系统属性,访问系统属性
    System.setProperties("App","1");Properties props = System.getProperties();
    props.getProperty("App")应用推出时设置"App"为0
      

  3.   

    〉打开一个实例的时候写入一个文件,表示已经打开,如果再次打开的时候,发现该文件的标志为打开状态,则如果你的JVM异常,那你的程序再也起不来了
      

  4.   

    http://expert.csdn.net/Expert/topic/1104/1104089.xml?temp=7.117862E-02
    给你一个例子,是利用ServerSocket和线程实现的
    import java.net.*;
    import java.io.*;
    public class CZar extends Thread
    {
    private int dport=15674;
    private String  message="There has been a CZar!!!";
    public CZar()
    {
    this.setDaemon(true);
    this.start();
    }

    public CZar(int port,String message )
    {
    this.dport=port;
    this.message=message;
    this.setDaemon(true);
    this.start();
    }
    public CZar(int port)
    {
    this.dport=port;
    this.setDaemon(true);
    this.start();
    }
    public CZar(String message)
    {
    this.message=message;
    this.setDaemon(true);
    this.start();
    }
    public void run()
    {
    try{
    while(true){
    ServerSocket ds=new ServerSocket(dport);
    ds.accept();
    }
    }
    catch(BindException e)
    {
    System.err.println(message);
    System.exit(1);
    }
    catch(IOException e)
    {
    System.err.println(e);
    e.printStackTrace();
    }
    }

    }可以在你的程序中直接使用在开始的时候加上,如
    CZar c=new CZar(6780/*port*(/,"there has been a instance running!!");就可以了。
    可能也有其他的方法解决这个问题
      

  5.   

    首先先谢谢大家,我试了一些方法:首先我想请问一些“hhv”大虾:import java.lang.*;
    import java.util.*;public class testTwo { public static void main(String[] args) {
    CZar c=new CZar(6780,"there has been a instance running!");
    testTwo instance = new testTwo();
    instance.runOneEver();
    } public void runOneEver(){
    while (true) {
    System.out.println("runOneEver : runOneEver is executing...");
    }
    }
    }这么调用对不对?如果对的话,程序结果是这样的:我打开了两个dos窗口,暂且称之为A,B;
    再A窗口执行:
    java testTwo;
    程序一直打印“runOneEver : runOneEver is executing...”;再在B窗口窗口执行:
    java testTwo;
    程序一直也打印 “runOneEver : runOneEver is executing...”
    只不过只打印了几十行,然后打印“there has been a instance running!”,接着退出了该程序。也就是他还是执行了。不是太符合要求。接着是“signboy(横)”和 farawayzheng_necas(遥远)  大虾:
    写文件这个方法可行,但不符合我的要求。再是“kare(小李飞刀的飞,小李飞刀的刀。) ”大虾:
    这个不好用。其他我不会用,就没有试过。
    不知各位大虾还有什么方法没有?
    小弟先谢过了!!!!!!
      

  6.   

    着确实是一个问题,也是我没有想的主要是没有考虑到线程的问题,惭愧!我把我的原程序修改了一下,相信可以处理你所提出的情况,至于有没有其他的问题,我不敢下定论。
    import java.net.*;
    import java.io.*;
    public class CZar extends Thread
    {
    private int dport=15674;
    private String  message="There has been a CZar!!!";
    public CZar()
    {
    this.start();
    }

    public CZar(int port,String message )
    {
    this.dport=port;
    this.message=message;
    this.start();
    }
    public CZar(int port)
    {
    this.dport=port;
    this.start();
    }
    public CZar(String message)
    {
    this.message=message;
    this.start();
    }
    ServerSocket ds=null;
    public void start()
    {
    this.setDaemon(true);
    try{
    Socket s=new Socket("127.0.0.1",this.dport); 
    System.out.println(this.message);
             System.exit(1);
            }
            catch(ConnectException e)
            {
             e.printStackTrace();
             try{
             ds=new ServerSocket(dport);
             }catch(IOException ie){ie.printStackTrace();}
             super.start();
            }
            catch(IOException ie){   //unknown host exception
             System.err.println(ie);
             ie.printStackTrace();
            }
    }

    public void run()
    {

    while(true){
    try{
    ds.accept();
    }
    catch(IOException e)
    {
    System.err.println(e);
    e.printStackTrace();
    }
    }
    }

    }
      

  7.   

    袄,应该是这样的。不然会不好看
    import java.net.*;
    import java.io.*;
    public class CZar extends Thread
    {
    private int dport=15674;
    private String  message="There has been a CZar!!!";
    public CZar()
    {
    this.start();
    }

    public CZar(int port,String message )
    {
    this.dport=port;
    this.message=message;
    this.start();
    }
    public CZar(int port)
    {
    this.dport=port;
    this.start();
    }
    public CZar(String message)
    {
    this.message=message;
    this.start();
    }
    ServerSocket ds=null;
    public void start()
    {
    this.setDaemon(true);
    try{
    Socket s=new Socket("127.0.0.1",this.dport); 
    System.out.println(this.message);
             System.exit(1);
            }
            catch(ConnectException e)
            {
                      try{
             ds=new ServerSocket(dport);
             }catch(IOException ie){ie.printStackTrace();}
             super.start();
            }
            catch(IOException ie){   //unknown host exception
             System.err.println(ie);
             ie.printStackTrace();
            }
    }

    public void run()
    {

    while(true){
    try{
    ds.accept();
    }
    catch(IOException e)
    {
    System.err.println(e);
    e.printStackTrace();
    }
    }
    }

    }
      

  8.   

    非要占个端口,这可不好,
    但是Java也就只能这样了
      

  9.   

    刚刚的程序在严格的意义上,并发条件下还是不严密的。我修改了一点如下:
    import java.net.*;
    import java.io.*;
    public class CZar extends Thread
    {
    private int dport=15674;
    private String  message="There has been a CZar!!!";
    public CZar()
    {
    this.start();
    }

    public CZar(int port,String message )
    {
    this.dport=port;
    this.message=message;
    this.start();
    }
    public CZar(int port)
    {
    this.dport=port;
    this.start();
    }
    public CZar(String message)
    {
    this.message=message;
    this.start();
    }
    ServerSocket ds=null;
    public void start()
    {
    this.setDaemon(true);
    try{
    Socket s=new Socket("127.0.0.1",this.dport); 
    System.out.println(this.message);
             System.exit(1);
            }
            catch(ConnectException e)
            {
                      try{
             ds=new ServerSocket(dport);
             }catch(IOException ie){ie.printStackTrace();}
             super.start();
            }
            catch(IOException ie){   //unknown host exception
             System.err.println(ie);
             ie.printStackTrace();
            }
    }

    public void run()
    {

    while(true){
    try{
    ds.accept();
    }
                               catch(BindException e){
                                  System.err.println(this.message);
                                  System.exit();
                               }
    catch(IOException e)
    {
    System.err.println(e);
    e.printStackTrace();
    }
    }
    }

    }
      

  10.   

    在你的main方法的第一行写上
    new CZar(23456/*你期望的端口号*/,
             message/*打印的信息*/);
    就可以了
      

  11.   

    谢谢hhv大虾替我解决了这个问题!多谢1