![](/img/trans.png)
[英]How do I see if a button with an imageIcon loaded has been pressed in java?
[英]How to detect when a button has been pressed in an external Java application?
我需要在沒有Automation API
情況下將自定義拼寫檢查器集成到現有的Java
應用程序中。
它應該像這樣工作:
A
,用戶打開一個窗口,在那里他/她輸入一些文本。 在那個窗口中有一個按鈕“Spellchecker”。 如何檢測外部Java
應用程序中是否按下了某個按鈕?
更新1:我嘗試安裝自己的AWT事件監聽器來檢測其他應用程序中的事件。
Toolkit.getDefaultToolkit().addAWTEventListener(new MyAWTEventListener(), AWTEvent.MOUSE_MOTION_EVENT_MASK);
while (true)
{
Thread.sleep(1);
}
但它不起作用。
更新2:更換系統事件隊列也不起作用。
private void queuePushingExperiment() throws InterruptedException,
InvocationTargetException {
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
queue.push(new MyEventQueue());
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
System.out.println("run");
}
});
}
public class MyEventQueue extends EventQueue {
@Override
public SecondaryLoop createSecondaryLoop() {
System.out.println("createSecondaryLoop");
return super.createSecondaryLoop();
}
@Override
protected void dispatchEvent(AWTEvent event) {
System.out.println("dispatchEvent");
super.dispatchEvent(event);
}
@Override
public AWTEvent getNextEvent() throws InterruptedException {
System.out.println("getNextEvent");
return super.getNextEvent();
}
@Override
public AWTEvent peekEvent() {
System.out.println("peekEvent");
return super.peekEvent();
}
@Override
public AWTEvent peekEvent(int id) {
System.out.println("peekEvent");
return super.peekEvent(id);
}
@Override
protected void pop() throws EmptyStackException {
System.out.println("pop");
super.pop();
}
@Override
public void postEvent(AWTEvent theEvent) {
System.out.println("postEvent");
super.postEvent(theEvent);
}
@Override
public void push(EventQueue newEventQueue) {
System.out.println("push");
super.push(newEventQueue);
}
}
更新3: java.awt.Window.getOwnerlessWindows()
和EventQueueMonitor.getTopLevelWindows()
都返回空數組,即使在調用時有一個JFrame
打開。
更新4:我注意到我無法寫入文件C:\\Program Files\\Java\\jdk1.7.0_25\\jre\\lib\\accessibility.properties
,目前行C:\\Program Files\\Java\\jdk1.7.0_25\\jre\\lib\\accessibility.properties
assistive_technologies=com.sun.java.accessibility.AccessBridge
是評論說。 這可能導致上述可訪問性對象的問題。
我怎樣才能做到這一點? 我認為對於每個Java程序都會啟動一個單獨的JVM。
實際上java app A可以從app B運行。你只需要調用A的main()方法。 所以實際上你啟動B.main()運行必要的B代碼,然后調用A.main()來運行A.在這種情況下,你可以使用Window類方法啟動窗口(或框架)。
public static Window[] getWindows()
在此之后,只需查找找到的窗口的所有子組件,檢查它們的類,當您找到JButton
檢查buton的文本或圖像以查找必要的實例。 然后在那里添加你的聽眾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.