我要运行一个线程,不论主线程main是否关闭,它都一直运行。               是否有办法啊!摆脱。

解决方案 »

  1.   

    楼主有可能搞错了,主线程关闭就意味着JVM关闭,JVM关闭其他线程肯定不能活楼主的意思应该是做一个守护线程,让其一直在运行。class Test extends Thread{
         public void run(){
             while(ture){
                Thread.sleep(5000);
                //do someting  
           }
      }
    }public static void main(){
       Thread t = new Test();
       t.setDaemon(true);
       t.start();
    }
      

  2.   

    5楼的哥哥。        ShutDownNetwork shutDown = new ShutDownNetwork(true); //启用关闭本地连接程序
            shutDown.setDaemon(true); 
            shutDown.start();
            我的线程启动代码!我写了一个swing界面,来关闭网络连接。
    当我swing界面关闭时候,此线程也被关闭了。
      

  3.   

    进程能够隐藏吗?我能看到我的javaw进程,我不希望别人看到
      

  4.   

    Swing 结束时,重新启动一个线程吧。 static {
    Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
    while (true) {
    try {
    Thread.sleep(1000);
    System.out.print("ok");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    });
    }
      

  5.   

    你的swing界面估计是设置了关闭窗口就退出程序,
    即 setDefaultCloseOperation(JFrame.CLOSE_ON_EXIT); 
    你不要设置退出程序,而是设置关闭窗口或者隐藏窗口就可以了
      

  6.   


    避免双重启动,可以通过socket来做,一方面程序启动的时候创建serversocket,如果端口被占用,就给端口发送消息,另一方面,程序监听端口,收到消息后做相应能够的处理,比如收到启动指令消息,如果窗口是隐藏的,就把它显示,收到退出指令消息,就退出程序要修改进程的名字,因为你的程序是通过JVM运行的,所以只能修改java.exe的名字来达到进程的改名,想隐藏进程,这不是java的技术范畴,是操作系统级别的,LZ自己搜索 windows隐藏进程 关键字能找到不少相关的信息的
      

  7.   


    这个有点不明白:我现在做的是一个Client,是不是在本Client里创建serversocket , 当发现端口被占用后 ,在处理抛出异常的时候进行处理呢?还有如何找到原先的那个程序,让它启动呢?
      

  8.   

    正是这个意思,发现端口被占用,就说明已经有相同的程序启动了(之前启动的占用了端口),在异常处理的地方,以socket通信的方式,给之前启动的程序发消息(之前启动的相当于Server端,当前启动的相当于Client端),不需要你去找原先的那个程序,你只要给它发消息就可以了(Client端怎么给Server端发息,这是最基本的Socket知识),因为程序都是你写的,所以用什么端口,发什么消息,收到消息怎么处理,可以自己决定。