代码:public class TestDlg extends JFrame implements ActionListener {
private static final long serialVersionUID = -7495940408592595397L;
private JPanel mainPanel;
private Button b = new Button("设置目录");
public TestDlg() {
//设置框架初始化参数
this.setTitle("二代证读取");
this.setLocation(200, 50);
/*初始化工作开始*/
mainPanel = new JPanel(); //初始化主面板 //添加按钮监视事件
b.addActionListener(this); //将按钮添加到主面板
mainPanel.add(b);
//将主面板加入框架
this.getContentPane().add(mainPanel);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(660, 500);
this.setVisible(true);
}
//此接口一定要继承StdCallLibrary 否则读卡错误!
public interface SynIDCardAPI extends StdCallLibrary {
SynIDCardAPI INSTANCE = (SynIDCardAPI)Native.loadLibrary("SynIDCardAPI", SynIDCardAPI.class); public int Syn_SetPhotoPath(int iOption, char[] cPhotopath);
}
//继承自ActionListener
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == b) {
String strInfo = new String();
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setDialogTitle("打开文件夹");
int ret = fileChooser.showOpenDialog(null);
if (ret == JFileChooser.APPROVE_OPTION) {
//文件夹路径
System.out.println(fileChooser.getSelectedFile().getAbsolutePath());
char[] strTmp = fileChooser.getSelectedFile().getAbsolutePath().toCharArray();
int nRet = SynIDCardAPI.INSTANCE.Syn_SetPhotoPath(0,strTmp);
strInfo.format("照片存放路径设置为 %s,nRet = %d", strTmp, nRet);
}
else {
strInfo = "选取路径失败!";
}
System.out.println(strInfo);
}
else
System.out.println("Something else");
}
public static void main(String[] args) {
new TestDlg();
}
}
其中,SynIDCardAPI.dll为C++编译的,放在项目目录\bin\com\synjones\angel下。错误信息:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'SynIDCardAPI': ???????¨
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:155)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:216)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:191)
at com.sun.jna.Library$Handler.<init>(Library.java:131)
at com.sun.jna.Native.loadLibrary(Native.java:279)
at com.sun.jna.Native.loadLibrary(Native.java:265)
at com.synjones.angel.TestDlg$SynIDCardAPI.<clinit>(TestDlg.java:173)
at com.synjones.angel.TestDlg.actionPerformed(TestDlg.java:209)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
private static final long serialVersionUID = -7495940408592595397L;
private JPanel mainPanel;
private Button b = new Button("设置目录");
public TestDlg() {
//设置框架初始化参数
this.setTitle("二代证读取");
this.setLocation(200, 50);
/*初始化工作开始*/
mainPanel = new JPanel(); //初始化主面板 //添加按钮监视事件
b.addActionListener(this); //将按钮添加到主面板
mainPanel.add(b);
//将主面板加入框架
this.getContentPane().add(mainPanel);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(660, 500);
this.setVisible(true);
}
//此接口一定要继承StdCallLibrary 否则读卡错误!
public interface SynIDCardAPI extends StdCallLibrary {
SynIDCardAPI INSTANCE = (SynIDCardAPI)Native.loadLibrary("SynIDCardAPI", SynIDCardAPI.class); public int Syn_SetPhotoPath(int iOption, char[] cPhotopath);
}
//继承自ActionListener
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == b) {
String strInfo = new String();
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setDialogTitle("打开文件夹");
int ret = fileChooser.showOpenDialog(null);
if (ret == JFileChooser.APPROVE_OPTION) {
//文件夹路径
System.out.println(fileChooser.getSelectedFile().getAbsolutePath());
char[] strTmp = fileChooser.getSelectedFile().getAbsolutePath().toCharArray();
int nRet = SynIDCardAPI.INSTANCE.Syn_SetPhotoPath(0,strTmp);
strInfo.format("照片存放路径设置为 %s,nRet = %d", strTmp, nRet);
}
else {
strInfo = "选取路径失败!";
}
System.out.println(strInfo);
}
else
System.out.println("Something else");
}
public static void main(String[] args) {
new TestDlg();
}
}
其中,SynIDCardAPI.dll为C++编译的,放在项目目录\bin\com\synjones\angel下。错误信息:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'SynIDCardAPI': ???????¨
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:155)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:216)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:191)
at com.sun.jna.Library$Handler.<init>(Library.java:131)
at com.sun.jna.Native.loadLibrary(Native.java:279)
at com.sun.jna.Native.loadLibrary(Native.java:265)
at com.synjones.angel.TestDlg$SynIDCardAPI.<clinit>(TestDlg.java:173)
at com.synjones.angel.TestDlg.actionPerformed(TestDlg.java:209)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
解决方案 »
- 请帮忙看下代码有什么错误?
- APACHE TOMCAT5.5启动的时候,怎么让他加载hibernate.cfg.cml文件?
- Action是单实例还是多实例,若是多实例在如何处理请求,若是单实例如何变成多实例?
- 请问:eclipse web问题
- java邮件服务使用哪些端口啊
- 请教Tomcat 4.1+eclipse2.1.3+lomboz的配置问题
- Struts-config.xml中配置数据源的问题
- struts下拉框的简单问题
- EJB方法中抛出的例外在APPLET如何捕获。
- 关于JAVA计算1+1/2!+1/3!....前20项的和,求解释一下
- wsad中,jsp页面无法解析el和jstl表达式?求解,心力交瘁!
- struts2 default-action-ref的问题
extends LinkageError
当 Java 虚拟机无法找到声明为 native 的方法的适当本地语言定义时,
抛出该错误。
路过 顶下
SynIDCardAPI INSTANCE = (SynIDCardAPI)Native.loadLibrary("E:\\测试程序\\DLL\\SynIDCardAPI", SynIDCardAPI.class);
程序就可以正确了,为什么?
我想用相对路径的话我要设置环境变量吗?还是我的DLL放置位置不对?
采用绝对路径
NativeLibrary.addSearchPath
System.setProperty("jna.library.path", "F:\\DF6100d\\df6100d\\WebRoot\\WEB-INF\\classes\\");
四种方法都试了,还是找不到