扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
package com.caokai.jni; *28hfR`lj6
m -]xcv
import javax.swing.JFrame; G3+3pQ
import javax.swing.JOptionPane; v"vT eWS
p0jBC
public class SingletonInstance extends JFrame { (f"5L
;D VaS&
static = o g;Mrqt
{ 3}=c;([B
try #'+nR iu;V
{ (/u}B
System.loadLibrary("SingletonInstance"); @6NyzQM
} Dq(F|0Qe
catch(Exception ex) k}}fI)y
{ qz?Us &k
ex.printStackTrace(); smmk6uZg5
} [FVoM
} YR WrIZrm
zMx UuK
private native int getInstanceSum(); ~=r^]}:~
vI+BR7s;=
/** B-S5^ /<
* Method main tR*;fy(,0
* q7 zpuY?
* }|k"M|
* @param args @{M!j%/D
* 1$C}] U>
*/ X&|\L9uM.g
public static void main(String[] args) [D5k%>
{ gf\Yt@6r
eK|B>/OV
SingletonInstance instance = new SingletonInstance(); .P,[:dRn
instance.pack(); In"v(KI8v
instance.setVisible(true); T;vnawG;
} KI ,*]Yr
%=bz +x(07
/** =YrV`~$n&
* Method SingletonInstance 5HE]:%#)
* f [5n
* Defult constructor. $F7L]fh
*/ =+`jxFMRl
public SingletonInstance() e !K]u}
{ ch Q( >F
1_b3ht&M
super("SingletonInstance"); _9wJPNj
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 5vK0FIf
checkRunning(); @oprP%n
} e{1842a
8 5EJL T
/** BLH916/
* Method checkRunning qBreaR$)oY
* ]O$}` Mh
* Check whether one instance of this program is running. (Mjp;d<2g
*/ 7#ph\cm
public void checkRunning() {q](t n
{ Sl*o:_r i
if(getInstanceSum() == 1) F<lTHL9
{ \R {%1 W
JOptionPane.showMessageDialog(null, "只能有一个程序的实例被运行!"); R=e~qBV)
System.exit(0); @p[e}_t(
} |x=NR=Ph*
} [h&w 0z,Z
} (N$1n- \7
#include <windows.h> @ 79ZF N%S
N",`zL0>
#include "SingletonInstance.h" O;AE{eM~_#
Vwi;#%
HANDLE hMutex; -=7\ 00
hB0 n
JNIEXPORT jint JNICALL Java_com_caokai_jni_SingletonInstance_getInstanceSum 0G>l>a4
(JNIEnv *env, jobject obj) T!-_b"2?
{ EqZX?Rgs,
hMutex = CreateMutex(NULL, FALSE, "SingletonInstance"); vz6o&Be[
if(hMutex) JF8ILB mO'
{ ^nsvQ,F
if(GetLastError() == ERROR_ALREADY_EXISTS) E^hB]EC
{ ;KCFA44 t
return JNI_TRUE; -L)M,{[@9
} I/B67v{]74
} M teFMzm
c ,i=}e+
return JNI_FALSE; R|Nh7`=
} 8 W Xw'
hP C*!/CL
>3GZIckE
说明: &%BM#Ic4 m
以上程序用到了JNI的有关知识,其中生成的头文件我没有列出源代码. $;S 9J}vU
至于具体的JNI编程知识,我以前有相关文档说明. }&%w=(7
你可以再做相应的处理来达到激活先前打开的实例而不是弹出那个警告对话框. ?K%m1/ !
如果有更好的方法实现,欢迎你和我探讨,我的QQ:415764553 yj5w]HPZ
这里我把本程序的所有C++和Java代码都附上. 9r<6`8e ]
查看本文来源
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者