<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
    在程序運行的過程中,我們可能需要更改一些配置,如果配置更改得很大的話,就可能會需要程序重新啟動,但是JAVA并沒有提供給我們直接的可以重啟的方法.在這里我們將利用JDK1.5新增的ProcessBuilder來創建一個重啟進程,然后自己的進程退出.

    簡單 代碼如下:
    /*
     * 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{
            
    //用一條指定的命令去構造一個進程生成器
            ProcessBuilder pb=new ProcessBuilder("java","-jar","Test3.jar");
            
    //讓這個進程的工作區空間改為F:\dist
            
    //這樣的話,它就會去F:\dist目錄下找Test.jar這個文件
            pb.directory(new File("F:\\dist"));
            
    //得到進程生成器的環境 變量,這個變量我們可以改,
            
    //改了以后也會反應到新起的進程里面去
            Map<String,String> map=pb.environment();
            Process p
    =pb.start();
            
    //然后就可以對p做自己想做的事情了
            
    //自己這個時候就可以退出了
            System.exit(0);
        }
    }

    在這里我們利用了ProcessBuilder這個類,這個類是一個進程的生成類,我們在起動一個進程之前可以設置好相關的一些參數,比如工作目錄,環境變量等等,但是設置環境變的時候,有一個需要注意的地方就是你設置的環境變量不會改變系統原來的環境變量.也就是說即使你把path設為空,這個進程的運行的時候,依然是讀取系統的path找到java這個命令,否則的話,你把path設為空,java命令是不可能找得到的.
    一般來說ProcessBuilder這個類都是在萬不得已的情況下才用的,因為用了它以后,程序很難保證可移植性,除非你在每個平臺上都找到相應的命令執行相應的事情.


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

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

    FeedBack:
    # re: 利用ProcessBuilder實現JAVA程序的重啟
    2009-01-19 22:58 | 游客
    在myEclpise環境下,這種方法怎么不行?!例如,我在MyEclipse環境下給出的兩個程序: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{
    //用一條指定的命令去構造一個進程生成器
    ProcessBuilder pb=new ProcessBuilder("java","test2");

    pb.start();
    //讓這個進程的工作區空間改為F:\dist
    //這樣的話,它就會去F:\dist目錄下找Test.jar這個文件
    //pb.directory(new File("d:\\dist"));
    //得到進程生成器的環境 變量,這個變量我們可以改,
    //改了以后也會反應到新起的進程里面去
    Map<String,String> map=pb.environment();
    Process p=pb.start();
    //然后就可以對p做自己想做的事情了
    //自己這個時候就可以退出了
    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("轉到");
    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();

    }
    }

    當然,上面的兩個程序,去掉package之后,在命令行下能得到預期結果,但在MyEclipse環境下,就得不到預期結果!
      回復  更多評論
      
    # re: 利用ProcessBuilder實現JAVA程序的重啟
    2009-01-19 22:59 | 千里冰封
    @游客
    因為myEclipse改變了程序運行的進程目錄  回復  更多評論
      
    主站蜘蛛池模板: 免费国产成人午夜私人影视| 亚洲综合久久1区2区3区| 在线播放免费人成毛片乱码| 亚洲黄色网址在线观看| 全免费a级毛片免费看不卡| 一个人免费观看视频在线中文 | 爽爽日本在线视频免费| 国产在线精品观看免费观看| 亚洲精品在线电影| 亚洲免费一区二区| 99国产精品永久免费视频| 欧洲乱码伦视频免费国产 | 亚洲综合视频在线观看| 免费成人午夜视频| 久草视频免费在线| 黄桃AV无码免费一区二区三区| 亚洲精品第一国产综合野| 亚洲色精品aⅴ一区区三区| 成人免费777777| 香蕉免费一区二区三区| 青青青视频免费观看| 亚洲国产片在线观看| 亚洲午夜久久久影院伊人| 成人永久免费高清| 国产精品1024永久免费视频| 香蕉高清免费永久在线视频| 男人进去女人爽免费视频国产| 蜜芽亚洲av无码一区二区三区| 久久久久亚洲精品日久生情| 亚洲综合日韩久久成人AV| 在线观看免费为成年视频| 久久精品毛片免费观看| 亚洲精品偷拍视频免费观看| 亚洲av第一网站久章草| 亚洲ts人妖网站| 精品亚洲A∨无码一区二区三区| 亚洲夜夜欢A∨一区二区三区| 免费一级成人毛片| 免费理论片51人人看电影| 一本无码人妻在中文字幕免费| 久久99精品免费视频|