Java调用C/C++ – JNI
昨天才看到,但是遇到一些问题,今天解决了,记下……(参考:http://netbeans.org/kb/55/beginning-jni-part1.html)
我用的是Netbeans 6.7,但是和其他的也应该大同小异吧。 基本流程: Java这边的:
创建java文件(带native的),还要记得在类中加入:System.loadLibrary(xxx) 。
然后用javah来生成C/C++的头文件(比如:javah –o pzc.h –jni –classpath … pzjava.Main)。 C这边的:
做一个“中间层”的C或者C++文件,include刚才生成的头文件,把方法复制下来。
还要记得把%JAVA_HOME%\include\和%JAVA_HOME%\include\win32添加到编译器的头文件搜索路径中(还要添加上刚刚生成的头文件的搜索路径) 。
要注意设置好编译器输出的动态库文件名,要和loadLibrary中的一致(在Windows下如果xxx是"pzc”,那输出的就是pzc.dll,如果是linux,就是libpzc.so)。
还要注意设置编译器的其他参数,如:--add-stdcall-alias(在Windows下需要)(查看gcc手册就知道它的意思)。
编译好dll后把dll复制到java项目空间就行了。 有时gcc选项还要加-m32,按照原文所说的,意思应该是,如果是在64位的机器上想要把dll编译成32位的话,那就要加上这个选项。
相关文档:
repaint 对组件进行重绘,比如一个panel,当你remove掉panel里面的一个组件时,你必须调用repaint方法才能对panel进行重绘,进行刷新,你想要删除的组件才能在界面上消失。
revalidate 对组件进行验证,比如一个panel,当你remove掉panel里面的一个组件时,当你调用revalidate方法后,panel的布 ......
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import or ......
/*Decryptor*/
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
/**
* Decrypt the password get form Xpress GUI
*/
public class Decryptor{
//加密
  ......
Java 多线程编程之三:synchronized 关键字的使用
带有 synchronized 关键字的方法代表这个方法加锁。恰当而又灵活地运用 synchronized 关键字,是多线程编程的必修课。
1、synchronized关键字的作用域有二种:
1)是某个对象实例内,synchronized aMethod(){}可以防止多 ......
python正文: 和其它语言一样,我们可以以命令行的形式给你的python程序传递参数,pyhton能够自动把命令行参数以字符串列表的形式存储在sys模块的arv变量。ok,我们先来看个例程:
# 文件名: printargs.py
#用途:演示python的传参
import sys
print sys.argv
在命 ......