<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    在程序運(yùn)行的過(guò)程中,我們可能需要更改一些配置,如果配置更改得很大的話,就可能會(huì)需要程序重新啟動(dòng),但是JAVA并沒(méi)有提供給我們直接的可以重啟的方法.在這里我們將利用JDK1.5新增的ProcessBuilder來(lái)創(chuàng)建一個(gè)重啟進(jìn)程,然后自己的進(jìn)程退出.

    簡(jiǎn)單 代碼如下:
    /*
     * Test3.java
     * 
     * Created on 2007-9-27, 11:46:31
     * 
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package test2;

    import java.io.File;
    import java.io.IOException;
    import java.util.Map;

    /**
     *
     * 
    @author hadeslee
     
    */
    public class Test3 {
        
    public static void restart() throws IOException{
            
    //用一條指定的命令去構(gòu)造一個(gè)進(jìn)程生成器
            ProcessBuilder pb=new ProcessBuilder("java","-jar","Test3.jar");
            
    //讓這個(gè)進(jìn)程的工作區(qū)空間改為F:\dist
            
    //這樣的話,它就會(huì)去F:\dist目錄下找Test.jar這個(gè)文件
            pb.directory(new File("F:\\dist"));
            
    //得到進(jìn)程生成器的環(huán)境 變量,這個(gè)變量我們可以改,
            
    //改了以后也會(huì)反應(yīng)到新起的進(jìn)程里面去
            Map<String,String> map=pb.environment();
            Process p
    =pb.start();
            
    //然后就可以對(duì)p做自己想做的事情了
            
    //自己這個(gè)時(shí)候就可以退出了
            System.exit(0);
        }
    }

    在這里我們利用了ProcessBuilder這個(gè)類,這個(gè)類是一個(gè)進(jìn)程的生成類,我們?cè)谄饎?dòng)一個(gè)進(jìn)程之前可以設(shè)置好相關(guān)的一些參數(shù),比如工作目錄,環(huán)境變量等等,但是設(shè)置環(huán)境變的時(shí)候,有一個(gè)需要注意的地方就是你設(shè)置的環(huán)境變量不會(huì)改變系統(tǒng)原來(lái)的環(huán)境變量.也就是說(shuō)即使你把path設(shè)為空,這個(gè)進(jìn)程的運(yùn)行的時(shí)候,依然是讀取系統(tǒng)的path找到j(luò)ava這個(gè)命令,否則的話,你把path設(shè)為空,java命令是不可能找得到的.
    一般來(lái)說(shuō)ProcessBuilder這個(gè)類都是在萬(wàn)不得已的情況下才用的,因?yàn)橛昧怂院?程序很難保證可移植性,除非你在每個(gè)平臺(tái)上都找到相應(yīng)的命令執(zhí)行相應(yīng)的事情.


    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-09-27 11:55 千里冰封 閱讀(8492) 評(píng)論(2)  編輯  收藏 所屬分類: JAVASE

    FeedBack:
    # re: 利用ProcessBuilder實(shí)現(xiàn)JAVA程序的重啟
    2009-01-19 22:58 | 游客
    在myEclpise環(huán)境下,這種方法怎么不行?!例如,我在MyEclipse環(huán)境下給出的兩個(gè)程序:package multipleProcess;

    /*
    * Test3.java
    *
    * Created on 2007-9-27, 11:46:31
    *
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    import java.io.File;
    import java.io.IOException;
    import java.util.Map;

    /**
    *
    * @author hadeslee
    */
    public class test3 {
    public static void main(String[] args) throws IOException{
    //用一條指定的命令去構(gòu)造一個(gè)進(jìn)程生成器
    ProcessBuilder pb=new ProcessBuilder("java","test2");

    pb.start();
    //讓這個(gè)進(jìn)程的工作區(qū)空間改為F:\dist
    //這樣的話,它就會(huì)去F:\dist目錄下找Test.jar這個(gè)文件
    //pb.directory(new File("d:\\dist"));
    //得到進(jìn)程生成器的環(huán)境 變量,這個(gè)變量我們可以改,
    //改了以后也會(huì)反應(yīng)到新起的進(jìn)程里面去
    Map<String,String> map=pb.environment();
    Process p=pb.start();
    //然后就可以對(duì)p做自己想做的事情了
    //自己這個(gè)時(shí)候就可以退出了
    System.exit(0);
    }
    }
    package multipleProcess;

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    /**
    *
    * @author hadeslee
    */
    public class test2 extends JPanel{

    private JTextField input;
    private JButton go;

    public test2() {
    super(new BorderLayout());
    initWindow();
    }

    private void initWindow() {
    try {

    go = new JButton("轉(zhuǎn)到");
    input = new JTextField();
    JPanel up = new JPanel(new BorderLayout());
    up.add(input, BorderLayout.CENTER);
    up.add(go, BorderLayout.EAST);
    this.add(up, BorderLayout.NORTH);

    } catch (Exception ex) { }
    JFrame jf = new JFrame("JAVA瀏覽器");
    jf.add(this, BorderLayout.CENTER);
    jf.setSize(500, 300);
    jf.setLocationRelativeTo(null);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent ae) {
    doOpen();
    }

    private void doOpen() {
    // try {
    String text = input.getText();
    if (text == null || text.equals("")) {
    return;
    }
    if (!text.toLowerCase().startsWith("http://")) {
    text = "http://" + text;
    }
    /* } catch (MalformedURLException ex) {
    Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);
    }*/
    }

    public static void main(String[] args) {
    new test2();

    }
    }

    當(dāng)然,上面的兩個(gè)程序,去掉package之后,在命令行下能得到預(yù)期結(jié)果,但在MyEclipse環(huán)境下,就得不到預(yù)期結(jié)果!
      回復(fù)  更多評(píng)論
      
    # re: 利用ProcessBuilder實(shí)現(xiàn)JAVA程序的重啟
    2009-01-19 22:59 | 千里冰封
    @游客
    因?yàn)閙yEclipse改變了程序運(yùn)行的進(jìn)程目錄  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 一级特级aaaa毛片免费观看| 亚洲综合av永久无码精品一区二区| 久久青青草原亚洲av无码app| a一级毛片免费高清在线| 日韩高清在线免费看| 亚洲欧美国产国产一区二区三区 | 99re在线这里只有精品免费| 国产亚洲av片在线观看播放| 久久九九全国免费| 亚洲伦理一区二区| 麻豆国产精品免费视频| 亚洲一区精彩视频| 日韩a级毛片免费观看| 黄网站色视频免费看无下截| 亚洲国产精品一区二区第一页免| 一级一看免费完整版毛片| 亚洲精品制服丝袜四区| 99在线观看精品免费99| 亚洲欧洲日韩极速播放 | 最新中文字幕电影免费观看| 亚洲日韩国产AV无码无码精品| 国产免费变态视频网址网站 | 91精品国产亚洲爽啪在线观看| 在线看免费观看AV深夜影院| 亚洲国产精品无码久久98| 亚洲国产精品成人AV无码久久综合影院| 国产免费内射又粗又爽密桃视频 | 久久国产精品免费专区| 亚洲午夜精品在线| 国产18禁黄网站免费观看| 三级网站免费观看| 亚洲乱码卡三乱码新区| 无码欧精品亚洲日韩一区夜夜嗨| 中文成人久久久久影院免费观看 | 亚洲性一级理论片在线观看| 免费无码一区二区三区蜜桃大| a在线视频免费观看在线视频三区| 亚洲欧洲日韩国产综合在线二区| 夜夜嘿视频免费看| a级毛片免费播放| 亚洲色成人网站WWW永久四虎|