博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何通过jni4net,在Java应用中调用C#接口
阅读量:5776 次
发布时间:2019-06-18

本文共 3726 字,大约阅读时间需要 12 分钟。

hot3.png

  1. 下载

  2. 下载,学习里面的代码实例

  3. 在环境变量中设置好JAVA_HOME和C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe

  4. 解压,在dll目录中运行工程,编译出JavaTwain.dll

  5. 从jni4net中拷贝bin和lib到项目中

  6. 运行generateProxies.cmd

  7. 运行run.cmd

    02162028_n2W8.png

参考原文:

示例解析

C#层

在C#工程中添加引用DynamicDotNetTWAIN.dll

02162029_FLzk.png

初始化Dynamic .NET TWAIN组件

public DotNetScanner(){    // initialize TWAIN Component    try    {        dynamicDotNetTwain = new Dynamsoft.DotNet.TWAIN.DynamicDotNetTwain();        dynamicDotNetTwain.OnPostAllTransfers += new Dynamsoft.DotNet.TWAIN.Delegate.OnPostAllTransfersHandler(this.dynamicDotNetTwain_OnPostAllTransfers);        dynamicDotNetTwain.MaxImagesInBuffer = 64;        dynamicDotNetTwain.IfAppendImage = true;        dynamicDotNetTwain.IfThrowException = true;        dynamicDotNetTwain.IfShowUI = false;        dynamicDotNetTwain.IfThrowException = true;        dynamicDotNetTwain.ScanInNewProcess = true;    }    catch    {        MessageBox.Show(dynamicDotNetTwain.ErrorString);    } }

创建JVM和CLR交互的接口

public interface IJavaProxy{    bool AcquireImage(int iIndex);    String[] GetSources();    bool RegisterListener(INativeProxy proxy);    void CloseSource();} public interface INativeProxy{    bool Notify(String message, String value);}
 

扫描图片,通知Java层加载

public bool AcquireImage(int iIndex){    try    {        //dynamicDotNetTwain.CloseSource();        bool success = dynamicDotNetTwain.SelectSourceByIndex(Convert.ToInt16(iIndex));        dynamicDotNetTwain.OpenSource();        dynamicDotNetTwain.AcquireImage();    }    catch (Dynamsoft.DotNet.TWAIN.TwainException exp)    {        String errorstr = "";        errorstr += "Error " + exp.Code + "\r\n" + "Description: " + exp.Message + "\r\nPosition: " + exp.TargetSite + "\r\nHelp: " + exp.HelpLink + "\r\n";        MessageBox.Show(errorstr);    }    catch (Exception exp)    {        String errorstr = "";        errorstr += "ErrorMessage: " + exp.Message + "\r\n";        MessageBox.Show(errorstr);    }     return true;} private void dynamicDotNetTwain_OnPostAllTransfers(){    //MessageBox.Show("dynamicDotNetTwain_OnPostAllTransfers");     if (dynamicDotNetTwain.MaxImagesInBuffer < 1)    {        return;    }     Image img = dynamicDotNetTwain.GetImage(0);    img = resizeImage(img, new Size(480, 640));    img.Save("twain.png");     if (listener != null)    {        listener.Notify("data ready", "twain.png");    }}
 

Java层

加载JavaTwain.j4n.dll

private void initTWAIN() {    try {        Bridge.init();        Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("JavaTwain.j4n.dll"));    }    catch (Exception e) {        e.printStackTrace();    }     mScanner = new DotNetScanner();    mScanner.RegisterListener(this);}

使用Swing来显示UI

public ScanDocuments() {     super(new BorderLayout());     initTWAIN();      //Create a file chooser     mFileChooser = new JFileChooser();     FileNameExtensionFilter filter = new FileNameExtensionFilter(             ".png", "png");     mFileChooser.setFileFilter(filter);     mLoad = new JButton("Load");     mLoad.addActionListener(this);      mScan = new JButton("Scan");     mScan.addActionListener(this);      // get sources     mSources = mScanner.GetSources();      if (mSources != null) {         mSourceList = new JComboBox(mSources);     }     else {         mSourceList = new JComboBox(new String[]{"N/A"});     }     mSourceList.setSelectedIndex(0);      // button panel     JPanel buttonPanel = new JPanel();      buttonPanel.add(mSourceList);     buttonPanel.add(mScan);     buttonPanel.add(mLoad);     add(buttonPanel, BorderLayout.PAGE_START);      // image panel     JPanel imageViewer = new JPanel();     mImage = new JLabel();     mImage.setSize(480, 640);     imageViewer.add(mImage);     add(imageViewer, BorderLayout.CENTER); }

转载于:https://my.oschina.net/yushulx/blog/286390

你可能感兴趣的文章
CentOS7 yum 安装git
查看>>
三元表达式之理解/jquery源代码分析之$.inArray实现
查看>>
STM32 mdk软件仿真时过不去时钟的问题
查看>>
Spark Streaming概念学习系列之Spark Streaming容错
查看>>
单例模式
查看>>
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
Python version 2.7 required, which was not foun...
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>
Java enum用法详解
查看>>
去云端的多条途径
查看>>
Docker容器从一知半解到入门
查看>>
关于“方法参数”
查看>>
Redis命令总结
查看>>
unable to write 'random state'错误解决
查看>>
context:annotation-config vs component-scan
查看>>