由另一个线程建立的独占访问 Java smartcardio

2024-01-04

All,

我很欣赏这个网站上的许多有用的答案,但我发现有必要发布我的第一个问题(如果您发现我的帖子中有任何需要改进的地方,请告诉我)。

我有一个中等大小的带有 GUI 的 Java 程序,它充当“中间人”和控制器。在信息流的一端,它通过 HTTP 服务器发送和接收数据。另一方面,它与 API 交互,其中数据最终与智能卡交换。 “中间”是 GUI、日志记录和其他一些功能。

还有一个功能(通过 GUI 启动)偶尔会加载智能卡的更新。否则,与智能卡的交换将通过 HTTP 启动。

问题是在这两种模式之间切换时(将 http 通信到智能卡,然后切换到加载更新,反之亦然)。

当我这样做时,我得出结论,我遇到了以下问题

CardException:由另一个线程建立的独占访问

正如抛出的sun.security.smartcardio

搜索网络显示异常似乎来自的代码是

void checkExclusive() throws CardException {
        Thread t = exclusiveThread;
          if (t == null) {
                return;
            }
             if (t != Thread.currentThread()) {
            throw new CardException("Exclusive access established by another Thread");
        }
    }

我的第一个想法是我需要实例化SmartCard API每次我需要它时(然后将其设置回空),而不是像我最初那样在整个程序中一次。

这适用于通过 http 进行的交换,我认为这是因为每个请求handle()方法是一个新线程。

在 GUI 中,更新由ActionEvent这使得一个实例CardUpdate。然后在该类中获取一个实例SmartCard API.

我想如果什么时候我也许会有更好的运气actionPerformed触发我将操作放在不同的临时线程上。到目前为止,没有。

我得到的最接近的是使用类似的东西:

SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {

如发现于在 Sun 的网站上 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html

使用它我可以进行更新,然后返回到 http 交换,但我无法进行另一次更新(根据 SwingWorker 的一次性使用规定)

然后我尝试制作多个SwingWorker根据需要做类似的事情

private class GUICardUpdate extends SwingWorker<Integer, Void > {

但后来我又回到了原来的问题。我还尝试以这种方式在 GUI 类之外执行一个简单的附加线程:

public class GUI extends javax.swing.JFrame implements ActionListener, Runnable

但这并没有什么不同。

也许我对线程的理解不够好,或者也许我忽略了一些简单的事情。有人有主意吗?

Thanks!


据我所知你正在使用javax.smartcardio软件包(直接或间接)与您的卡配合使用。一些线程(由您或您可能在其上使用的框架创建)javax.smartcardio) 调用beginExclusive()方法上的Card实例以确保对卡的独占访问。

独占访问是必要的,因为对 IC 卡上保存的数据的处理是依赖于状态的,因此正确选择数据文件并读取其记录需要应用程序层的操作不干扰其他应用程序或线程的操作。为此目的,这三Card接口方法beginExclusive(), endExclusive() and checkExclusive() exist.

所以你应该检查你的(框架)代码是否调用beginExclusive()然后没有打电话endExclusive().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由另一个线程建立的独占访问 Java smartcardio 的相关文章

随机推荐

  • Linq to SQL for WebMatrix(网页)

    我想知道是否可以在基于 webmatrix 的网站 C Razor 等 中使用 Linq to SQL 我喜欢数据库搜索之类的东西 如果我可以使用 Linq to SQL 来实现这一点 那就太棒了 或者至少 将行作为数据集或其他内容返回 然
  • 如何限制列表对象模板侧而不是视图侧

    限制对象的方法之一是向这样的函数添加限制 def ten objects obj Model objects all 0 10 limit to 10 return objects obj 但是 如何在模板内而不是在视图内实现此目的 我知道
  • 什么是EOF!!在 bash 脚本中?

    有一个命令我不明白 custom command lt lt EOF 我想问什么是EOF 在 bash 脚本中 我确实用google找到了EOF 但是google会忽略 自动 所以我找不到 EOF 我知道文件结尾标记 但我不完全知道 的含义
  • iOS 使用 swift 创建通用 Alamofire 请求

    最近我开始学习使用 swift 开发 iOS 应用程序 所以我对它很陌生 我想在 swift 中实现rest api 调用并发现我们可以使用URLRequest 所以我写了generic method调用所有类型 例如get put pos
  • 如何在滑动嵌套recyclerview的cardview时禁用swiperefreshlayout

    当我在 swiperefreshlayout 中稍微向下滑动卡时 它认为我正在尝试刷新 我该如何避免这种情况 如果你有一个嵌套的RecyclerView 例如 命名为recyclerView您可以致电 recyclerView setNes
  • 在tomcat 8.5服务器上安装Godaddy ssl证书

    我正在尝试在我的网站上安装 SSL 证书 我正在使用Godaddy ssl 证书为了这 我已生成 csr 请求证书并将证书上传到我的服务器上 我正在使用 KEYTOOL 来使用所有这些 我从 godaddy 下载了 zip 文件中的三个文件
  • 如何在 g:select 中将 i18n 与 Grails/Groovy 枚举一起使用?

    我正在尝试在 Grails Groovy 枚举上进行 i18n 本地化 public enum Notification GENERIC 0 CONFIRM RESERVATION 100 CONFIRM ORDER 200 CONFIRM
  • 背景颜色属性向上滑动

    问题出在transitionBackground函数中 在这种情况下 当按下页面上的向上按钮时 该函数就会触发
  • 检查 MATLAB 是否以多线程模式运行

    The 文档状态 http www mathworks com help techdoc ref matlabwindows htmlMATLAB 可以以单线程模式启动 如下所示 matlab singleCompThread 我的问题是
  • #User 的未定义局部变量或方法“confirmed_at”

    我正在使用 Rails 3 可能有重复的here https stackoverflow com questions 7857070 rspec user test gives undefined local variable or met
  • 在 couchdb 中搜索或通过弹性搜索进行 River 搜索

    我知道我们在 couchdb 上创建视图 然后我们可以搜索 另一个有趣的方法是通过 River 将 couchdb 与 Elasticsearch 连接起来 并在 Elasticsearch 中进行搜索 我有两个问题 就磁盘空间使用而言 e
  • 在Java中,对象变量是否包含对象的地址?

    我和老师谈话时 她提到对象变量 她指的是对象的实例 不包含对象本身 而是包含内存中的地址 我听说在 Java 中 对象的实例实际上包含对内存中对象的引用 我错了吗 引用与包含内存中的地址还是其他东西相同吗 对象变量isn t与对象的实例相同
  • c# - 从属性构造函数抛出异常

    I found 本文 http lostechies com jimmybogard 2008 11 23 beware exceptions in attribute constructors 关于这个主题并尝试了以下方法 public
  • 从相机捕获图像并将其直接发送到服务器

    我正在尝试编写一个小代码 允许我从相机拍摄照片后直接发送照片 我的意思是当我从相机拍照时 这张照片将直接发送到服务器 而无需存储在我的手机或SD卡 所以我编写了这段代码 但我不知道它是否正确 因为实际上它显示了很多消息错误 但我不知道问题出
  • 如何使用检索到的分层结果集创建对象?

    我使用的是C 语言 我的问题是我不知道如何将检索到的分层结果集存储到我的对象中 这是我的对象 public class CategoryItem public string Name get set public int CategoryI
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 在 VSCode 中更改 Git 帐户

    同步我的更改时 VSCode 第一次尝试连接时 我不小心输入了旧 github 帐户的凭据 凭据适用于旧帐户 但我想使用新帐户 现在我找不到更改帐户的方法 已尝试卸载 安装 但 VSCode 一直记住我的登录信息 有什么想法如何刷新给定帐户
  • 如何获取 R 中具有公共 S4 超类的类列表

    在 R 中 如何获取 S4 超类的子类列表 我发现 showClass mySuperClass complete FALSE 但它只打印结果 我想将它存储在向量中以使用它 发现类定义的类 类定义本身就是一个 S4 类 cls getCla
  • 为什么当我点击 vue 组件上的另一个选项卡时滑块不起作用?

    我的看法是这样的 foreach leagues as league a league gt name a endforeach div class tab pane active div
  • 由另一个线程建立的独占访问 Java smartcardio

    All 我很欣赏这个网站上的许多有用的答案 但我发现有必要发布我的第一个问题 如果您发现我的帖子中有任何需要改进的地方 请告诉我 我有一个中等大小的带有 GUI 的 Java 程序 它充当 中间人 和控制器 在信息流的一端 它通过 HTTP