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

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

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

    posts - 41,  comments - 40,  trackbacks - 0

    如何只運行一個實例,網上有三種方法(單模式不算):

    1、占用端口(有效,但是有端口被挪用的缺陷)

    2、檢查文件是否存在(有效,但突然停機可能有問題)

    3、使用JNI(有效,但喪失可移植性)

    我寫的和第二個原理差不多,判斷某個文件是否被占用,并且我把記錄日志、保存日志、判斷是否運行放在一起。

    你可以轉載本Blog,但是不能篡改作者名稱。

    import java.awt.event.WindowEvent;
    import java.awt.event.WindowAdapter;

    import java.io.File;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.FileOutputStream;
    import java.io.FileNotFoundException;

    import javax.swing.JFrame;


    /*******************************************************************************
    ?*
    ?* 只運行一個實例
    ?*
    ?* Just single instance
    ?*
    ?*
    ?* Author: NeedJava
    ?*
    ?* Modified: 2007.08.29
    ?*
    ?*
    ?* 你可以使用此程序于任何地方,但請保留程序作者及注釋的完整。如果你改進了程序,
    ?*
    ?* 請在原作者后添加姓名,如:Author: NeedJava/Jack/Mike,版本及修改時間同理。
    ?*
    ?******************************************************************************/
    public final class SingleInstance
    {
    ? /*****************************************************************************
    ?? *
    ?? * 構造函數
    ?? *
    ?? ****************************************************************************/
    ? private SingleInstance()
    ? {
    ??? this( "vab", ".vab", "vab" );
    ? }


    ? public SingleInstance( String filePrefixName, String fileSuffixName, String directoryName )
    ? {
    ??? this.init( filePrefixName, fileSuffixName, directoryName );
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 原理:
    ?? *
    ?? * 用重定向將標準錯誤輸出流定向到一個日志文件,占用它,使其不能被刪除
    ?? *
    ?? * 以后的實例試圖將存在的此日志文件改名并且另存為某個文件夾下
    ?? *
    ?? * 如果成功,說明沒有程序占用它(不排除你在用它,缺陷?),正好保存日志
    ?? *
    ?? * 如果不成功,退出、renameTo命令有一箭雙雕的作用
    ?? *
    ?? ****************************************************************************/
    ? private final void init( String filePrefixName, String fileSuffixName, String directoryName )
    ? {
    ??? if( filePrefixName==null||fileSuffixName==null||directoryName==null )
    ????? {
    ??????? exitWithWarning( "Error: Invalid file name.", 10 );
    ????? }

    ??? //We need check the fileSuffixName here? From the tail?

    ??? String fileName=filePrefixName+fileSuffixName;

    ??? try{ File error=new File( fileName );

    ???????? if( error.exists() )
    ?????????? {
    ???????????? File directory=new File( directoryName );

    ???????????? String newFileName=directoryName+File.separator+convertMillisecond2DateTime( error.lastModified() )+fileSuffixName;

    ???????????? //System.out.println( newFileName );

    ???????????? if( directory.exists() )
    ?????????????? {
    ???????????????? if( directory.isDirectory() )
    ?????????????????? {
    ???????????????????? //renameTo也是好東東,既可以改名,還可以移文件
    ???????????????????? if( !error.renameTo( new File( newFileName ) ) )
    ?????????????????????? {
    ???????????????????????? exitWithWarning( "Error: The instance already exists, I will exit.", 11 );
    ?????????????????????? }
    ?????????????????? }
    ???????????????? else{ exitWithWarning( "Error: The \'"+directoryName+"\' is not a valid directory.", 21 );
    ???????????????????? }
    ?????????????? }
    ???????????? else{ if( directory.mkdirs() )
    ???????????????????? {
    ?????????????????????? //renameTo也是好東東,既可以改名,還可以移文件
    ?????????????????????? if( !error.renameTo( new File( newFileName ) ) )
    ???????????????????????? {
    ?????????????????????????? exitWithWarning( "Error: The instance already exists, I will exit.", 11 );
    ???????????????????????? }
    ???????????????????? }
    ?????????????????? else{ exitWithWarning( "Error: Failed to create the \'"+directoryName+"\' directory.", 22 );
    ?????????????????????? }
    ???????????????? }
    ?????????? }

    ???????? //重定向標準錯誤輸出流,所有功能全靠它。來,啵一個
    ???????? System.setErr( new PrintStream( new FileOutputStream( fileName ) ) );
    ?????? }
    ??? catch( FileNotFoundException fnfe )
    ???????? {
    ?????????? //fnfe.printStackTrace();

    ?????????? exitWithWarning( fnfe.toString(), 23 );
    ???????? }
    ??? catch( IOException ioe )
    ???????? {
    ?????????? //ioe.printStackTrace();

    ?????????? exitWithWarning( ioe.toString(), 29 );
    ???????? }
    ??? catch( Exception e )
    ???????? {
    ?????????? //e.printStackTrace();

    ?????????? exitWithWarning( e.toString(), 99 );
    ???????? }
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * You can change the milliseconds to the date and time string here
    ?? *
    ?? * I just return the original
    ?? *
    ?? * Don't get the same string :)
    ?? *
    ?? ****************************************************************************/
    ? private final String convertMillisecond2DateTime( long millisecond )
    ? {
    ??? return ""+millisecond;
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * Return the warning and the exit code, then exit the application
    ?? *
    ?? ****************************************************************************/
    ? private final void exitWithWarning( String warning, int code )
    ? {
    ??? System.out.println( warning==null ? "" : warning );

    ??? System.exit( code );
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 主函數入口
    ?? *
    ?? ****************************************************************************/
    ? public final static void main( String[] args )
    ? {
    ??? SingleInstance si=new SingleInstance( "error", ".txt", "error" );

    ??? final JFrame frame=new JFrame( "Just single instance. By NeedJava. 2007.08.29" );

    ??? //I stay here, to make some friends happy.
    ??? frame.addWindowListener( new WindowAdapter()
    ??? {
    ????? public void windowClosing( WindowEvent we )
    ????? {
    ??????? frame.dispose();

    ??????? System.exit( 0 );
    ????? }
    ??? } );

    ??? frame.setBounds( 200, 200, 700, 70 );

    ??? frame.setVisible( true );
    ? }
    }

    posted on 2007-08-29 22:11 NeedJava 閱讀(3208) 評論(8)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 久久久精品免费视频| 免费人成再在线观看网站| 国产偷伦视频免费观看| 久久夜色精品国产亚洲av| 未满十八私人高清免费影院| 吃奶摸下高潮60分钟免费视频| 亚洲国产成人久久精品软件| 日韩精品免费一区二区三区| 亚洲av永久无码| 免费a级毛片大学生免费观看 | 一级**爱片免费视频| 亚洲欧洲中文日韩av乱码| 精品免费久久久久国产一区 | 亚洲成人免费在线观看| 亚洲精品熟女国产| 国产精品1024永久免费视频| 国产91在线|亚洲| 亚洲国产成人九九综合| 成人免费大片免费观看网站| 国产成人精品日本亚洲专区6| 青草草在线视频永久免费| 免费一区二区三区在线视频| 337p日本欧洲亚洲大胆裸体艺术| 97人妻精品全国免费视频| 亚洲精品美女久久久久9999| 性做久久久久久久免费看| 老子影院午夜伦不卡亚洲| 亚洲综合区小说区激情区| 外国成人网在线观看免费视频 | 狼友av永久网站免费观看| 国产精品免费看久久久香蕉| 亚洲狠狠久久综合一区77777| 免费H网站在线观看的| 免费的黄网站男人的天堂| 亚洲专区在线视频| 精品国产免费观看一区| 国产午夜精品久久久久免费视| 亚洲w码欧洲s码免费| 亚洲一区精品伊人久久伊人| 免费观看激色视频网站(性色)| 猫咪免费人成网站在线观看入口|