<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)論
      
    主站蜘蛛池模板: 亚洲国产成人久久综合一区77| 亚洲国产综合无码一区| 国内自产少妇自拍区免费| 亚洲无码精品浪潮| 亚洲成人免费在线观看| 色屁屁在线观看视频免费| 91麻豆国产免费观看| 亚洲国产黄在线观看| fc2免费人成在线视频| 成年在线观看免费人视频草莓| 狠狠色伊人亚洲综合成人| 成人A片产无码免费视频在线观看| 成人啪精品视频免费网站| 亚洲精品国产第一综合99久久 | 亚洲砖码砖专无区2023| 国产精品免费高清在线观看| 四虎在线播放免费永久视频| 亚洲一卡二卡三卡四卡无卡麻豆| a级毛片在线免费观看| 免费一级毛片不卡在线播放| 精品亚洲成A人无码成A在线观看| 无码国产精品一区二区免费式直播| 亚洲成a人片77777kkkk| 九九久久国产精品免费热6| 浮力影院第一页小视频国产在线观看免费| 亚洲一二成人精品区| 国产天堂亚洲国产碰碰| 德国女人一级毛片免费| 香港一级毛片免费看| 亚洲AV永久无码精品水牛影视| 国产精品一区二区三区免费| 亚洲无线电影官网| 在线观看AV片永久免费| 亚洲最大成人网色香蕉| 在线视频精品免费| 亚洲va成无码人在线观看| 国产又粗又长又硬免费视频| 日韩国产欧美亚洲v片| 国产成人免费全部网站 | 精品日韩亚洲AV无码| 好男人看视频免费2019中文 |