Java小程序和网页上的文本输入控件之间的桥梁 - java

我一直在使用Java小程序,该小程序有助于仅使用鼠标进行写操作。就我而言,我尝试将其合并到我的webiste项目中,如下所示:

当用户单击页面上的任何输入元素(文本框/文本区域)时,此JAVA小程序将加载到网页本身上。在下面显示的JAVA小程序的屏幕快照中,用户指向指向的字母,并且相应的文本被写入小程序的文本框中。

现在,我想做的是将文本从applet的TextBox获取到网页上的input元素。我知道这需要Java和JavaScript之间的交互,但不是专业人士,我真的没有抓住这一切。这是Java applet和我编写的代码。

Java Applet和jQuery代码(298kB):http://bit.ly/jItN9m

请为扩展此代码提供一些帮助。
非常感谢!

更新

我搜索了某个地方,发现它->要在Java文本框中获取文本,Applet中的getter方法可检索文本:

public class MyApplet extends JApplet {
  // ...
  public String getTextBoxText() { return myTextBox.getText(); }
}

我认为在JQuery代码中将添加以下几行:

var textBoxText = $("#applet-id")[0].getTextBoxText();
//Now do something with the text

对于小程序的代码,我在这里看到了GNOME git页面。 getText调用已存在-查看此文件的底部:http://git.gnome.org/browse/dasher/tree/java/dasher/applet/JDasherApplet.java

我需要调用“getCurrentEditBoxText”,但是何时应调用此方法“getCurrentEditBoxText”?
就我而言,当用户单击新的输入控件等时,我可能必须这样做。

参考方案

您可以在Applet和页面上的任何javascript方法之间进行全面交流。 Kyle在一篇很好的文章中演示了Javascript如何调用小程序并请求文本值。但是,我假设您希望HTML文本字段在每次单击鼠标时都更新,这意味着该applet需要与页面进行通信。我会将您的JavaScript修改为以下形式:

var activeTextArea = null;

$('textarea, input').click(function() {
    $(this).dasher();
    activeTextArea = this;
}); 

function updateText(text) {
     // Careful: I think textarea and input have different 
     // methods for setting the value. Check the 
     // jQuery documentation
     $(activeTextArea).val(text); 
}

假设您拥有该applet的源代码,则可以使其与上述javascript函数通信。添加此导入:

import netscape.javascript.JSObject;

然后,在您具有鼠标单击的onClick处理程序中,添加:

// After the Applet Text has been updated
JSObject win = null;
try {
    win = (JSObject) JSObject.getWindow(Applet.this);
    win.call("updateText", new Object[] { textBox.getText() });
} catch (Exception ex) {
    // oops
}

每次调用代码块时,这都会更新文本。如果您无权访问applet源,那么事情将变得更加棘手。您需要设置某种JavaScript超时方式,该方式会不断从applet读取值,但是这假设applet具有返回文本框值的方法。

另请参见:http://java.sun.com/products/plugin/1.3/docs/jsobject.html

更新修改小程序是最好的选择,因为这将触发任何事件。例如,如果您希望每次单击都会更改HTML TextField,则单击发生在applet中,如上所述,该applet必须进行修改才能触发更新。不修改小程序,我看到两个选择。选项#1使用计时器:

var timer;
var activeTextArea;

$('textarea, input').click(function() {
    $(this).dasher();
    activeTextArea = this;
    updateText();
} 

function updateText() {
    // Same warnings about textarea vs. input
    $(activeTextArea).val($('#appletId')[0].getCurrentEditBoxText());
    timer = setTimeout("updateText()", 50);
}

function stopUpdating() {
    clearTimeout(timer);
}

这类似于上面的代码,除了单击文本区域会触发循环功能updateText(),它将每隔50ms将HTML文本字段的值设置为Applet文本字段的值。这可能会在点击和更新之间引入较小的延迟,但是它会很小。您可以增加计时器频率,但这会增加性能消耗。我看不到“隐藏”小程序的位置,但是该功能应调用stopUpdating,以便我们不再试图与隐藏的小程序联系。

选项#2(未编码)

我将尝试捕获Applet在HTML Dom中冒出的点击。然后,您可以跳过计时器,并在Applet容器上放置click()行为以进行相同的更新。但我不确定此类事件是否会冒泡,因此不确定是否会奏效。即使是这样,我也不知道它在各个浏览器之间的兼容性如何。

选项#3

第三种选择是不要在每次单击时更新HTML文本字段。这将仅仅是Kyle和我在上面的帖子的结合,以便在您每次用applet“完成”时设置文本字段的值。

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java DefaultSslContextFactory密钥库动态更新 - java

我有一个使用org.restlet.engine.ssl.DefaultSslContextFactory的现有应用程序和一个在服务器启动时加载的密钥库文件。我有另一个应用程序,该应用程序创建必须添加的证书服务器运行时动态地更新到密钥库文件。为此,我在代码中创建了证书和私钥,然后将其写入到目录。该目录由bash脚本监视,该脚本检查是否有新文件,如果出现,它将…