- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 DLL 注入(inject)和一些 jni 技巧成功地将我自己的 Java 代码注入(inject)到正在运行的 Oracle Forms 应用程序中。 (Windows 7、32 位、Oracle Forms 11、JRE Java 8)
我能够遍历组件树并在一些基本 Java 对象中查询和设置值,例如类 oracle.forms.ui.VTextField
我在尝试模拟用户点击 oracle.apps.fnd.ui.Button
时卡住了
我尝试了两件事:
AbstractButton
类的simulatePush
方法PushButton
类的activate
方法(这 2 个类在 Button
的类层次结构中)
结果相同: 1. 起初,它工作正常:当按钮是“搜索”按钮时,完成搜索并显示结果。 2. 然后,它会立即中断应用程序,并弹出一个提示 FRM-92100 Your connection to the Server was interrupted
。
从那里,应用程序被挂起。
更新:似乎导致与服务器断开连接的错误是:
java.lang.SecurityException: this KeyboardFocusManager is not installed in the current thread's context at java.awt.KeyboardFocusManager.checkCurrentKFMSecurity(Unknown Source) at java.awt.KeyboardFocusManager.getGlobalFocusOwner(Unknown Source) at java.awt.KeyboardFocusManager.processSynchronousLightweightTransfer(Unknown Source) at sun.awt.windows.WComponentPeer.processSynchronousLightweightTransfer(Native Method) at sun.awt.windows.WComponentPeer.requestFocus(Unknown Source) at java.awt.Component.requestFocusHelper(Unknown Source) at java.awt.Component.requestFocusHelper(Unknown Source) at java.awt.Component.requestFocus(Unknown Source) at oracle.forms.handler.UICommon.updateFocus(Unknown Source) at oracle.forms.handler.UICommon.setFVP(Unknown Source) at oracle.forms.handler.UICommon.setFVP(Unknown Source) at oracle.forms.handler.UICommon.onUpdate(Unknown Source) at oracle.forms.handler.ComponentItem.onUpdate(Unknown Source) at oracle.forms.handler.JavaContainer.onUpdate(Unknown Source) at oracle.forms.handler.UICommon.onUpdate(Unknown Source) at oracle.forms.engine.Runform.onUpdateHandler(Unknown Source) at oracle.forms.engine.Runform.processMessage(Unknown Source) at oracle.forms.engine.Runform.processSet(Unknown Source) at oracle.forms.engine.Runform.onMessageReal(Unknown Source) at oracle.forms.engine.Runform.onMessage(Unknown Source) at oracle.forms.engine.Runform.processEventEnd(Unknown Source) at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source) at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source) at oracle.ewt.button.PushButton.activate(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at CustomAWT.run(CustomAWT.java:34) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$400(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(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)
我的代码在这里:CustomAWT.run(CustomAWT.java:34)
并使用 invokeLater
调用。问题可能是:调用 oracle.ewt.button.PushButton.activate
方法时,我不在正确的 EDT 中。
在 Java 控制台中使用“列出线程”,我得到:
Dump thread list ...
Group main,ac=30,agc=2,pri=10
main,5,alive
traceMsgQueueThread,5,alive,daemon
Timer-0,5,alive
Java Plug-In Pipe Worker Thread (Client-Side),5,alive,daemon
AWT-Shutdown,5,alive
AWT-Windows,6,alive,daemon
AWT-EventQueue-0,6,alive
SysExecutionTheadCreator,5,alive,daemon
CacheMemoryCleanUpThread,5,alive,daemon
CacheCleanUpThread,5,alive,daemon
Browser Side Object Cleanup Thread,5,alive
JVM[id=0]-Heartbeat,5,alive,daemon
Windows Tray Icon Thread,5,alive
Thread-13,5,alive
Group Plugin Thread Group,ac=3,agc=0,pri=10
AWT-EventQueue-1,6,alive
TimerQueue,5,alive,daemon
ConsoleWriterThread,6,alive,daemon
Group http://xxxx.xxxx.xxxxx.xx:8001/OA_JAVA/-threadGroup,ac=13,agc=0,pri=4
Applet 1 LiveConnect Worker Thread,4,alive
AWT-EventQueue-2,4,alive
thread applet-oracle/apps/fnd/formsClient/FormsLauncher.class-1,4,alive
Applet 2 LiveConnect Worker Thread,4,alive
thread applet-oracle.forms.engine.Main-2,4,alive
Forms-StreamMessageReader,4,alive
Forms-StreamMessageWriter,4,alive
HeartBeat,4,alive
Busy indicator,1,alive,daemon
TaskScheduler timer,4,alive
CursorIdler,4,alive
Thread-14,4,alive
Flush Queue,4,alive
Done.
所以,有三个 AWT-EventQueue
线程...现在的问题是:如何查询/检索正确的线程,以及如何生成 Runnable
传递给invokeLater
在“好线程”中运行(我猜好线程是最后一个(AWT-EventQueue-2
)
最佳答案
经过大量实验并使用 EventQueue
和 ThreadGroup
等关键字进行谷歌搜索后,我终于找到了解决方案(在 Works For Me类别,请注意)。
我使用 sun.awt.AppContext
类。一些文档和来源 here (grepcode.com)
getAppContexts
方法获取正在运行的 AppContext
的集合。AppContext
,使用 getThreadGroup
方法获取他的 ThreadGroup
。ThreadGroup
对象,使用getName
方法。sun.awt.AppContext.EVENT_QUEUE_KEY
的 Object
属性,使用 AppContext
的 get
方法。EventQueue
。创建一个 java.awt.event.InvocationEvent
对象,将您的 Runnable
传递给 CTOR,并使用 EventQueue< 的 postEvent
方法
。run
方法将在正确的线程中执行。备注:
main
、Plugin Thread Group
和 http://xxxx.xxxx.xxxxx.xx :8001/OA_JAVA/-threadGroup
你的里程可能会有所不同。sun.awt.AppContext
,编译器可能会以 warning: sun.awt.AppContext is Sun proprietary 的形式发出警告API,可能会在未来的版本中删除
这不是很酷,但我暂时会接受。run
方法中,我用oracle.ewt.lwAWT.AbstractButton
的simulatePush
方法测试OK。invokeLater
。对于 invokeAndWait
,需要围绕 postEvent
调用编写更多代码。查看 EventQueue
类的一些来源,作为起点。关于java - 当有多个 AWT-EventQueue 线程时如何选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34227178/
我不确定我做错了什么。 我创建了一个计时器,用于更新 GUI 顶部的文本图形。但是,当计时器用完时,它会更改一个变量(链接到一个监听器),并向我的 GUI 添加一个新的图形“场景/组/节点”。 -更改
我有一个带有 gui 的简单 JAVA 程序,它只递增 int 变量并在 JLabel 中显示其值。我通过使用 Runnable 类在其中调用 EventQueue.invokeLater() 来创建
我们遇到了一个问题,EventQueue 表有时增长得非常快,每秒最多 3k 条记录,而且从不清除记录(目前为 3000 万条)。我们的环境设置如下: 网站核心 7.2 4台CD服务器和1台CM服务器
我最近在我的机器上安装了 JDK 1.6 update 43。从那时起,每当我尝试运行事件处理程序时,我都会遇到一个问题,显示线程“AWT-EventQueue-0 中出现异常” “ 它指向哪个线程?
有人可以解释一下 EventQueue 对象在 Java Swing 中的用途吗? 我最困惑的是如何应用排队事件。也许提供事件队列的通用用途会有所帮助。 最佳答案 因为 Swing 是 single
我有一个外部设备一次向我发送 1 个字符的数据。我正在将其写入 JTextPane 上的 StyledDocument。这些数据是在不是 AWT 线程的线程上发送给我的,因此我需要创建 AWTEven
我有如下一段代码 import java.awt.*; import java.awt.event.*; import java.lang.reflect.*; import javax.swing.
我有一个扩展 JDialog 的登录表单,用户可以通过刷卡或输入用户名和密码登录。 我创建了一个 Runnable 守护程序,它与磁条阅读器通信,启动时它会请求刷卡,它会一直等到有人刷卡。如果应用程序
运行此代码时一切正常,但是当我更改内部代码以与 EventQueue.invokeLater() 一起使用时,主要问题出现了 package dav.gui; import java.awt.Bord
我有4个类(class) 用户界面/产品用户界面 Controller /产品 Controller 项目包/产品 项目包/ProductRecords 当我尝试按下“添加”按钮时,它返回一个错误,如
我对以下显示 EventQueue 行为不一致的示例代码有疑问: public static void main( String[] args ) throws InvocationTargetExc
我有一个 Java 程序占用了 100% 的 CPU,但似乎什么也没做。 如果我进行线程转储,则有 4 个线程(在 5 个线程池中)等待获取锁。 "Incoming WorkPool 5" - Thr
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this q
所以我试图弄清楚这个贪吃蛇游戏是如何运作的: http://zetcode.com/tutorials/javagamestutorial/snake/ 当我将代码复制到编译器中时,我在这一段代码中遇
有人可以帮我调试这个吗 编辑1:错误不在下面的代码中*以下代码中出现错误:* if (e.getSource().equals(btnRefresh)) {
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 9 年前。 Empl
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
只是尝试打印第 31 行的 LOL,或者任何人都有更好的方法从下面保存的文本文件中返回余额。请随意分享,我在这个问题上陷入了困境。出现错误: "Exception in thread "AWT-Eve
下午,我对一些 JFrame 代码有疑问,当用户按下“新用户”时,此 JFrame 就会启动,每当他们这样做时,我都会得到: Exception in thread "AWT-EventQueue-0
好的,我收到此错误 awt eventqueue 0 nullpointerexception 错误。当我尝试删除 JPanel 时。 令我困惑的是,当我删除另一个 JPanel 时,它工作得很好,但
我是一名优秀的程序员,十分优秀!