「init」中にJFrameを開始するJAppletがあります。JFrame にはいくつかの操作があり、ユーザーは最終的に JFrame を閉じます。
ここで、何かを行う必要があることを JavaScript を介してブラウザに通知したいと思います。
それを達成する方法は?アプレット単体なら以下の簡単な関数で十分
public void notifyBrowser() {
JSObject browserWindow = JSObject.getWindow(this);
browserWindow.eval("try{RefreshFilesInLongue();}catch(e){alert('error');}");
}
しかし、コード内の「これ」はアプレットオブジェクトを参照しており、JFrame にいる間にそのオブジェクトに到達する方法がわかりません。
JFrame は、フォーカスを受け取るために次のように呼び出されます。
public void init() {
paramPostUrl = this.getParameter("postUrl");
/* Create and display the applet */
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
ScanFrame scanFrame = new ScanFrame();
scanFrame.setPostUrl(paramPostUrl);
scanFrame.setVisible(true);
try {
Thread.sleep(300L);
scanFrame.toFront();
} catch (InterruptedException ex) {
Logger.getLogger(Applet.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
したがって、私の質問は次の
とおり
です。
ご協力いただきありがとうございます。
したがって、変更されたコードは次のようになります。
public class Applet extends javax.swing.JApplet {
...
public void init() {
paramPostUrl = this.getParameter("postUrl");
myApplet = this;
/* Create and display the applet */
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
initComponents();
ScanFrame scanFrame = new ScanFrame(myApplet);
...
とスキャンフレーム
public class ScanFrame extends javax.swing.JFrame implements ScannerListener {
...
private JApplet appletObj;
public ScanFrame(JApplet myApplet) {
appletObj = myApplet;
....
private void sendScannedDocumentToCallingApp() {
....
JSObject browserWindow;
browserWindow = JSObject.getWindow((JApplet)appletObj);
browserWindow.eval("try{RefreshFilesInLongue();}catch(e){alert('error');}");
}
そして私が得るエラー:
Exception in thread "AWT-EventQueue-2" java.util.NoSuchElementException
at java.util.LinkedList.getFirst(Unknown Source)
at java.awt.SequencedEvent.getFirst(Unknown Source)
at java.awt.SequencedEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$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)