gpt4 book ai didi

applet - 是否可以在 JavaFX 应用程序(桌面)中使用现有的 Applet

转载 作者:行者123 更新时间:2023-12-01 15:23:22 25 4
gpt4 key购买 nike

我似乎在这方面找不到任何东西——除了它不能嵌入到 WebView 中。

我目前有一个图像查看产品,可以通过小程序访问并通过 HTML 页面中的 JavaScript 进行控制。

我正在研究使用 JavaFX 的客户端应用程序,它可能需要访问该小程序。我试图将它嵌入到 WebView 中,但没有奏效。在这个网站上搜索表明 webview 不支持插件技术。这是用 Java FX 构建一个小程序 - 而是调用现有产品并与之交互。

因此,我想知道是否还有另一种方法 - 使用 JavaFX 8?

谢谢!

最佳答案

使用一个非常简单的示例小程序进行快速试用,证明可以将 Swing 小程序嵌入 JavaFX 应用程序(使用 Java 8)。

sample

hello

这是来自 Oracle getting started with applets documentation 的 HelloWorld 小程序:

import javax.swing.*;

public class HelloWorldApplet extends JApplet {
public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
JLabel lbl = new JLabel("Hello World");
add(lbl);
}
});
} catch (Exception e) {
System.err.println("createGUI didn't complete successfully");
}
}
}

这是一个嵌入它的 JavaFX 应用程序:
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import java.awt.Dimension;

import java.util.concurrent.*;

public class JavaFXSwingAppletHolderApplication extends Application {
private JApplet applet = new HelloWorldApplet();
private Dimension appletSize;

@Override public void init() throws ExecutionException, InterruptedException {
applet.init();

FutureTask<Dimension> sizingTask = new FutureTask<>(() ->
applet.getRootPane().getPreferredSize()
);
SwingUtilities.invokeLater(sizingTask);
appletSize = sizingTask.get();
}

@Override public void start(Stage stage) {
final SwingNode swingNode = new SwingNode();
SwingUtilities.invokeLater(() ->
swingNode.setContent(applet.getRootPane())
);

stage.setScene(
new Scene(
new Group(swingNode),
appletSize.getWidth(), appletSize.getHeight(),
Color.BLACK
)
);
stage.show();
}

@Override public void stop() {
applet.stop();
applet.destroy();
}

public static void main(String[] args) {
launch(args);
}
}

备注

我不确定 sizingTask 是否是上面的代码是绝对必要的,我只是把它卡在那里以防万一我对 Swing 布局知之甚少,所以认为最好是明确的。

此示例仅嵌入了一个基本的小程序,您的小程序将更加复杂,因此您需要为您的特定小程序验证类似的解决方案,以确保它适用于您。

推荐

大多数现有的小程序都很小——将小程序重新实现为纯 JavaFX 组件实现可能比尝试将小程序嵌入到 JavaFX 应用程序中更好。

另请注意, JEP 289: Deprecated the Applet API 已弃用 applet API 作为 Java 9 的一部分。 .

关于applet - 是否可以在 JavaFX 应用程序(桌面)中使用现有的 Applet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23662895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com