我似乎无法在此处找到任何内容 - 除了它无法嵌入到网络视图中。
我目前有一个图片查看产品,可以通过applet访问,并通过HTML页面控制。
我正在使用JavaFX调查客户端应用程序,它可能需要访问该applet。我试图将它嵌入到WebView中,但是没有用。在此网站上搜索表明webview不支持插件技术。这是用Java FX构建一个applet - 而是调用现有产品并与之交互。
因此,我想知道是否还有其他方式 - 使用JavaFX 8?
谢谢!
答案 0 :(得分:2)
使用非常简单的示例applet进行快速试用,演示了可以将Swing applet嵌入到JavaFX应用程序中(使用Java 8)。
<强>示例强>
以下是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布局知之甚少,所以认为最好是明确的。
此示例仅嵌入基本小程序,您的小程序将更加复杂,因此您需要为特定小程序验证类似的解决方案,以确保它适合您。
<强>建议强>
大多数现有applet非常小 - 将applet重新实现为纯JavaFX组件实现可能更好,而不是尝试将applet嵌入JavaFX应用程序中。
另请注意,作为Java 9的一部分,applet API已被JEP 289: Deprecated the Applet API弃用。