- 浏览: 1476399 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
Java调用动态库最简便方法和最好用的组件
记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码。比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 MessageBoxA,具体步骤是 Java 中声明一个 native 方法,然后用 javah 命令生成JNI样式的头文件,再自己实现头文件中声明的方法,在实现方法中装载动态库 user32.dll,调用 MessageBoxA 方法,需要把自己写的这部分 C/C++ 代码封装成一个动态库,如Sample.dll,最后在 java 中装载 Sample.dll,然后执行其中所声明的本地方法。
可见,用老实的JNI方式,我们在调用一个已知动态库的时候还需要额外生成一个符合JNI规则的动态库作为桥梁,显得有点多余了。
下面我将引入一个开源的组件 JNative,在 http://sourceforge.net/projects/jnative 下载(我是通过在sourceforge中输入java dll搜索到的),通过它调用已有动态库中的方法就非常的方便,因为中间的JNI处理过程它都为我们做好了。JNative 现在还是 Beta1 版,期待正式版的出炉,还不知道这个版本将会有什么Bug出现。
我们下载到的 jnative 的目录中可以看到三个文件,分别是 JNative.dll,libjnative.so,JNative.jar
JNative.dll 为 Windows 平台下用的,可以拷到相应的lib加载路径,如user.dir、path、system32或windows目录下
libnative.so 为Linux平台下用的,可以拷到相应的lib加载路径,如user.dir、path目录下
JNative.jar 这个就是我们编程时候要用的
在下载的 jnative 的源代码中有示例代码,观看代码 org\xvolks\test\JNativeTester.java 就知道 jnative 是如何调用动态库方法的
如代码行 User32.messageBox(0, "Demonstrates JNative in action with many Win32 calls", "Welcome to JNative", 0);
是调用的关User32的messageBox方法,而messageBox的代码是
public static final int messageBox( int parentHandle, String message,
String caption, int buttons) throws NativeException,
IllegalAccessException {
JNative n = null ;
try {
n = new JNative(DLL_NAME, "MessageBoxA" ); // 常量DLL_NAME的值为User32.dll
// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法
n.setRetVal(Type.INT); // 指定返回参数的类型
int i = 0 ;
n.setParameter(i++, Type.INT, "" + parentHandle);
n.setParameter(i++, Type.STRING, message);
n.setParameter(i++, Type.STRING, caption);
n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的参数类型和值
n.invoke(); // 调用方法
return Integer.parseInt(n.getRetVal());
} finally {
if (n != null )
n.dispose(); // 记得释放
}
}
上面的注释是我加上去的。
Type有一种叫做Type.PSTRUCT枚举值,对C/C++中结构的处理都考虑到了,只要用JNative的Pointer类的实例来与结构对应就行了。org\xvolks\test\SNDPTester.java中演示了如何传递C/C++中的结构相对应的Java数据类型,也就是怎么封装成一个JNative的Pointer类型。
还有在JNative中用了JDK1.5的一些特性,如枚举、静态引入等,所以在JDK1.4下是不能用的。
附:JNative 当前版本到了 1.3.2 了
--------------------------------------------------------------------------------
[版权声明]本站内文章,如未标注 [转载],均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
posted on 2006-05-18 02:09 隔叶黄莺 阅读(746) 评论(15) 编辑 收藏
Feedback
# re: Java调用动态库最简便方法和最好用的组件 2007-11-14 10:31 啥事
有没有如何获得dll传出参数的例子 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-14 12:37 隔叶黄莺
没有这么聪明,C++也没办法知道,只能按照API约定来调用传参取值,知道一个地址不标识是什么类型的 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-18 10:09 隔叶黄莺
JNative 的 getRetVal() 方法就是获取dll中函数传出的参数。 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-22 17:34 啥事
可能是我没有表述清楚,我想知道jnative如何调用dll的出参。
getRetVal()只是调用是否成功的一个返回值。如:
我们有个HNBridge.dll中有getParam(Long pDataHandle,String paramName,REF String paramValue,UINT nMaxValuseLenth) 其中REF String paramValue
是一个返回值,getRetVal()只是校验该函数调用是否成功。
java如何调用REF String paramValue。
这是我的源码
public static final Object[] getparam(long s1,String s2,long s4 ) throws NativeException,IllegalAccessException{
JNative n=null;
try{
n= new JNative("HNBridge.dll", "GetParam");
n.setRetVal(Type.INT);
// n.setMemory(0, "");
//n.set
int i=0;
Pointer s6 = new Pointer(MemoryBlockFactory.createMemoryBlock(1024));
s6.zeroMemory();
s6.setStringAt(0, "ddd");
use=new UserCall("");
// s6.setStringAt(0, "sss");
//pTar=new Pointer(MemoryBlockFactory.createMemoryBlock(36));
n.setParameter(i++, Type.LONG, ""+s1);
n.setParameter(i++, Type.STRING,s2);
// n.setParameter(i++, use.createPointer());
n.setParameter(i++, s6);
n.setParameter(i++, Type.LONG, ""+s4);
n.invoke(); // 调用方法
//System.out.println(n.getParameter(0));
// s3=s6.getAsString();
System.out.println(s6.getAsString()+"fhz");
Object [] mm=new Object[2];
mm[0]=n.getRetVal();
// mm[1]=use.getValueFromPointer();
mm[1]=s6.getAsString();
// mm[1]=s3;
//use.dispose();
return mm;
}
但总是得不到正确值
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-22 17:40 隔叶黄莺
getRetVal()是实际的返回值 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:37 hill
为什么我用自己写的程序老是收到这样的错误
Exception in thread "main" java.lang.IllegalStateException: JNative library not loaded, sorry !
at org.xvolks.jnative.JNative.<init>(JNative.java:337)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at test.TestJNI.main(TestJNI.java:30)
即使是用JNativeTester.java也会收到错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.xvolks.jnative.JNative.nLoadLibrary(Ljava/lang/String;Ljava/lang/String;Z)I
at org.xvolks.jnative.JNative.nLoadLibrary(Native Method)
at org.xvolks.jnative.JNative.<init>(JNative.java:348)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at org.xvolks.jnative.util.User32.MessageBox(User32.java:396)
at test.JNativeTester.main(JNativeTester.java:312)
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:42 hill
用JNativeTester.java去load “user32.dll"会出现上面的错误,但是load自己的dll却是Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Project\test\src\test\umenable.dll: Can't find dependent libraries
?难道我的dll是不能用的? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:43 隔叶黄莺
把JNative.dll 为 Windows 平台下用的,可以拷到相应的lib加载路径,如user.dir、path、system32或windows目录下,保证你的java程序能加载到这个动态库 回复 更多评论
# 还是有问题 2007-12-11 12:38 hill
谢谢你的解答,现在可以load我的dll了不过问题又来了,我发现看不到dll里面的方法,即使用JNative的getDLLFileExports返回的都是(几个dll都是返回这样的)
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
我的这些dll好像是基于com的,不多我对这些都不熟悉,咋办? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-11 12:48 隔叶黄莺
基于Com的,有些不一样的。Com初始化过程在哪里完成的呢 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-12 10:50 hill
谢谢你的解答,我发现我这个程序用jacob(Java-Com Bridge)来做就可以了,非常简单,只要new一个ActiveXComponent,就可以调用里面的函数了 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 10:18 cary
我用JNative来调用DLL但是现在遇到问题是类型间的转换,DLL里的类型始终不能被JAVA认出来。那怕我在DLL里这样写:return "hello",java里:
n3.setRetVal(Type.STRING);
System.out.println(n3.getRetVal())
都不能被打印出来,不知道你有遇到过类型方面的问题吗? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 10:32 隔叶黄莺
没遇到这种问题,请把你能重现问题的完整代码贴出来看看 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 12:51 cary
n3=new JNative("CID_test","CID_GetNum");
n3.setRetVal(Type.STRING);
System.out.println("n3=="+n3.getRetVal());
这是JAVA代码。
c++
extern "C" _declspec(dllexport) string CID_GetNum()
{
char buf[32];
string s;
int i=0;
i=SW_ReceiveCID(0,buf);
if(i!=0)
{
s += buf;
return "hello";
}
return "hello";
}
你看看我这样写有问题吗?
@隔叶黄莺
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 21:06 隔叶黄莺
尽量能的话还是严谨一点吧
_declspec(dllexport) 前面是两个下划线,你少写了一个
你用 string 也该把 string.h 或 string #include 进来
SW_ReceiveCID 不存在的函数
存在两个问题
1. 你的动态库必须返回一个 c-style 字符串,如 char*,用 std 的 string,java 那边不会认成是 String,你可以中间过程用 string,最后返回的字符串要是 c-style 格式。这应该不成问题,你见过许多 windows api 就是用的这种字符串,如 LPSTR 样的
2. 你在 java 代码忘了调用 dll 的相应方法,在取返回值之前必须 n3.invoke() 一下。
重新试试吧,祝你好运
记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码。比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 MessageBoxA,具体步骤是 Java 中声明一个 native 方法,然后用 javah 命令生成JNI样式的头文件,再自己实现头文件中声明的方法,在实现方法中装载动态库 user32.dll,调用 MessageBoxA 方法,需要把自己写的这部分 C/C++ 代码封装成一个动态库,如Sample.dll,最后在 java 中装载 Sample.dll,然后执行其中所声明的本地方法。
可见,用老实的JNI方式,我们在调用一个已知动态库的时候还需要额外生成一个符合JNI规则的动态库作为桥梁,显得有点多余了。
下面我将引入一个开源的组件 JNative,在 http://sourceforge.net/projects/jnative 下载(我是通过在sourceforge中输入java dll搜索到的),通过它调用已有动态库中的方法就非常的方便,因为中间的JNI处理过程它都为我们做好了。JNative 现在还是 Beta1 版,期待正式版的出炉,还不知道这个版本将会有什么Bug出现。
我们下载到的 jnative 的目录中可以看到三个文件,分别是 JNative.dll,libjnative.so,JNative.jar
JNative.dll 为 Windows 平台下用的,可以拷到相应的lib加载路径,如user.dir、path、system32或windows目录下
libnative.so 为Linux平台下用的,可以拷到相应的lib加载路径,如user.dir、path目录下
JNative.jar 这个就是我们编程时候要用的
在下载的 jnative 的源代码中有示例代码,观看代码 org\xvolks\test\JNativeTester.java 就知道 jnative 是如何调用动态库方法的
如代码行 User32.messageBox(0, "Demonstrates JNative in action with many Win32 calls", "Welcome to JNative", 0);
是调用的关User32的messageBox方法,而messageBox的代码是
public static final int messageBox( int parentHandle, String message,
String caption, int buttons) throws NativeException,
IllegalAccessException {
JNative n = null ;
try {
n = new JNative(DLL_NAME, "MessageBoxA" ); // 常量DLL_NAME的值为User32.dll
// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法
n.setRetVal(Type.INT); // 指定返回参数的类型
int i = 0 ;
n.setParameter(i++, Type.INT, "" + parentHandle);
n.setParameter(i++, Type.STRING, message);
n.setParameter(i++, Type.STRING, caption);
n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的参数类型和值
n.invoke(); // 调用方法
return Integer.parseInt(n.getRetVal());
} finally {
if (n != null )
n.dispose(); // 记得释放
}
}
上面的注释是我加上去的。
Type有一种叫做Type.PSTRUCT枚举值,对C/C++中结构的处理都考虑到了,只要用JNative的Pointer类的实例来与结构对应就行了。org\xvolks\test\SNDPTester.java中演示了如何传递C/C++中的结构相对应的Java数据类型,也就是怎么封装成一个JNative的Pointer类型。
还有在JNative中用了JDK1.5的一些特性,如枚举、静态引入等,所以在JDK1.4下是不能用的。
附:JNative 当前版本到了 1.3.2 了
--------------------------------------------------------------------------------
[版权声明]本站内文章,如未标注 [转载],均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
posted on 2006-05-18 02:09 隔叶黄莺 阅读(746) 评论(15) 编辑 收藏
Feedback
# re: Java调用动态库最简便方法和最好用的组件 2007-11-14 10:31 啥事
有没有如何获得dll传出参数的例子 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-14 12:37 隔叶黄莺
没有这么聪明,C++也没办法知道,只能按照API约定来调用传参取值,知道一个地址不标识是什么类型的 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-18 10:09 隔叶黄莺
JNative 的 getRetVal() 方法就是获取dll中函数传出的参数。 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-22 17:34 啥事
可能是我没有表述清楚,我想知道jnative如何调用dll的出参。
getRetVal()只是调用是否成功的一个返回值。如:
我们有个HNBridge.dll中有getParam(Long pDataHandle,String paramName,REF String paramValue,UINT nMaxValuseLenth) 其中REF String paramValue
是一个返回值,getRetVal()只是校验该函数调用是否成功。
java如何调用REF String paramValue。
这是我的源码
public static final Object[] getparam(long s1,String s2,long s4 ) throws NativeException,IllegalAccessException{
JNative n=null;
try{
n= new JNative("HNBridge.dll", "GetParam");
n.setRetVal(Type.INT);
// n.setMemory(0, "");
//n.set
int i=0;
Pointer s6 = new Pointer(MemoryBlockFactory.createMemoryBlock(1024));
s6.zeroMemory();
s6.setStringAt(0, "ddd");
use=new UserCall("");
// s6.setStringAt(0, "sss");
//pTar=new Pointer(MemoryBlockFactory.createMemoryBlock(36));
n.setParameter(i++, Type.LONG, ""+s1);
n.setParameter(i++, Type.STRING,s2);
// n.setParameter(i++, use.createPointer());
n.setParameter(i++, s6);
n.setParameter(i++, Type.LONG, ""+s4);
n.invoke(); // 调用方法
//System.out.println(n.getParameter(0));
// s3=s6.getAsString();
System.out.println(s6.getAsString()+"fhz");
Object [] mm=new Object[2];
mm[0]=n.getRetVal();
// mm[1]=use.getValueFromPointer();
mm[1]=s6.getAsString();
// mm[1]=s3;
//use.dispose();
return mm;
}
但总是得不到正确值
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-11-22 17:40 隔叶黄莺
getRetVal()是实际的返回值 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:37 hill
为什么我用自己写的程序老是收到这样的错误
Exception in thread "main" java.lang.IllegalStateException: JNative library not loaded, sorry !
at org.xvolks.jnative.JNative.<init>(JNative.java:337)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at test.TestJNI.main(TestJNI.java:30)
即使是用JNativeTester.java也会收到错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.xvolks.jnative.JNative.nLoadLibrary(Ljava/lang/String;Ljava/lang/String;Z)I
at org.xvolks.jnative.JNative.nLoadLibrary(Native Method)
at org.xvolks.jnative.JNative.<init>(JNative.java:348)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at org.xvolks.jnative.util.User32.MessageBox(User32.java:396)
at test.JNativeTester.main(JNativeTester.java:312)
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:42 hill
用JNativeTester.java去load “user32.dll"会出现上面的错误,但是load自己的dll却是Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Project\test\src\test\umenable.dll: Can't find dependent libraries
?难道我的dll是不能用的? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-10 17:43 隔叶黄莺
把JNative.dll 为 Windows 平台下用的,可以拷到相应的lib加载路径,如user.dir、path、system32或windows目录下,保证你的java程序能加载到这个动态库 回复 更多评论
# 还是有问题 2007-12-11 12:38 hill
谢谢你的解答,现在可以load我的dll了不过问题又来了,我发现看不到dll里面的方法,即使用JNative的getDLLFileExports返回的都是(几个dll都是返回这样的)
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
我的这些dll好像是基于com的,不多我对这些都不熟悉,咋办? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-11 12:48 隔叶黄莺
基于Com的,有些不一样的。Com初始化过程在哪里完成的呢 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2007-12-12 10:50 hill
谢谢你的解答,我发现我这个程序用jacob(Java-Com Bridge)来做就可以了,非常简单,只要new一个ActiveXComponent,就可以调用里面的函数了 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 10:18 cary
我用JNative来调用DLL但是现在遇到问题是类型间的转换,DLL里的类型始终不能被JAVA认出来。那怕我在DLL里这样写:return "hello",java里:
n3.setRetVal(Type.STRING);
System.out.println(n3.getRetVal())
都不能被打印出来,不知道你有遇到过类型方面的问题吗? 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 10:32 隔叶黄莺
没遇到这种问题,请把你能重现问题的完整代码贴出来看看 回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 12:51 cary
n3=new JNative("CID_test","CID_GetNum");
n3.setRetVal(Type.STRING);
System.out.println("n3=="+n3.getRetVal());
这是JAVA代码。
c++
extern "C" _declspec(dllexport) string CID_GetNum()
{
char buf[32];
string s;
int i=0;
i=SW_ReceiveCID(0,buf);
if(i!=0)
{
s += buf;
return "hello";
}
return "hello";
}
你看看我这样写有问题吗?
@隔叶黄莺
回复 更多评论
# re: Java调用动态库最简便方法和最好用的组件 2008-04-30 21:06 隔叶黄莺
尽量能的话还是严谨一点吧
_declspec(dllexport) 前面是两个下划线,你少写了一个
你用 string 也该把 string.h 或 string #include 进来
SW_ReceiveCID 不存在的函数
存在两个问题
1. 你的动态库必须返回一个 c-style 字符串,如 char*,用 std 的 string,java 那边不会认成是 String,你可以中间过程用 string,最后返回的字符串要是 c-style 格式。这应该不成问题,你见过许多 windows api 就是用的这种字符串,如 LPSTR 样的
2. 你在 java 代码忘了调用 dll 的相应方法,在取返回值之前必须 n3.invoke() 一下。
重新试试吧,祝你好运
发表评论
-
Spring官网改版后下载
2014-04-11 10:39 717Spring官网改版后找了好久都没有找到直接下载Jar包的链接 ... -
Java 系统架构设计
2014-03-31 21:18 1444首先分为网关和引擎等多个部分: 第一部分:网关 1、主要负责转 ... -
Java 提高系统性能
2014-03-03 22:22 2573首先是从三方面来提高的,应用层面,服务器端层面,数据库层面。 ... -
2013年11月份艺龙旅行网面试题
2013-11-22 23:39 12251.给你两个字符串s1="abc",s2= ... -
国猪555555555
2013-11-22 00:16 1001国足第一招:场地太差,不适应。 国足第二招:场地太好,不适应。 ... -
自己认为的一些技术点
2013-08-14 00:12 11601.rest风格的编程。 2.memcached的命中率低的问 ... -
HttpClient
2013-01-14 23:57 1010package org.abin.lee.test.http; ... -
JAVA单例模式读取properties配置文件
2012-12-16 01:12 2619前段时间出差去做一个数据接口的项目,有很多参数需要从工程中的配 ... -
Java 反射调用方法
2012-10-22 23:52 947package lc.abin.lee.reflect; i ... -
Java Https单向,双向验证
2012-09-23 22:47 2962https一般来说有单项SSL和双向SSL连接之分。 单项 ... -
Java中的transient,volatile和strictfp关键字
2012-09-12 18:00 794http://www.iteye.com/topic/5295 ... -
Server JBoss v5.0 at localhost was unable to start within 50 seconds.
2012-09-05 11:35 1843[标题]:[转]JBoss was unable to sta ... -
HttpUrlConnection 开发例子
2012-03-25 16:23 3312/*** * * 发送HTTP请求 * @ ... -
Java Enum类型定义的方法
2012-03-12 12:34 2302//枚举接口 package com.abin.info.s ... -
Rational Rose 2003 下载及破解方法
2012-03-06 12:49 1358FROM:http://blog.csdn.net/fengl ... -
使用Spring进行面向切面(AOP)编程
2012-02-22 10:35 23021.aop理论知识 横切性关注点:对哪些方法拦截,拦截后怎么处 ... -
BASE64、MD5、SHA、HMAC几种加密算法
2012-02-21 12:53 8765BASE64编码算法不算是真正的加密算法。 MD5、 ... -
文本文件和二进制文件区别及java中字节流和字符流归纳
2012-02-17 15:48 2952首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的 ... -
Java 字节流转化为文件
2012-02-17 15:46 5651已知:byte[] bytes=new FileToBytes ... -
Java核心之Java内存分配原理
2012-02-17 13:40 929JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍 ...
相关推荐
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
26.java的awt和swing组件的GUI设计的关键 27.对于java流的认识 28.简单描述一下awt与swing区别。 29.简述java编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...