由于某种原因,当应用程序在自包含部署之后执行时, JavaFX目前似乎不支持Cipher加密服务的任何算法,如此处所述。
鉴于此代码:
import java.security.Security;
import java.util.Iterator;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
public final class Main extends Application
{
@Override
public void start(final Stage stage)
{
final ObservableList<String> ol = FXCollections.observableArrayList();
final ListView<String> lv = new ListView(ol);
for (final Iterator<String> iter = Security.getAlgorithms("Cipher").iterator(); iter.hasNext();)
ol.add(iter.next());
final Scene s = new Scene(lv, 500, 400);
stage.setScene(s);
stage.sizeToScene();
stage.show();
}
}
如果此代码通过java 启动器在本地运行,则使用各种算法获取填充输出没有问题,但如果应用程序已打包为self-contained ,则会给出一个空列表。
但是,我也偶然发现了这一点:
默认情况下仅包含 Java 运行时的一个子集。排除了一些可选且很少使用的文件以减小包大小,例如所有可执行文件。如果您需要默认情况下未包含的内容,则需要将其复制为后处理步骤。对于可安装的包,您可以从填充自包含应用程序文件夹后执行的配置脚本执行此操作。请参阅第 6.3.3 节,“使用插入资源进行自定义”。
引用的段落可能是可能的原因吗?为了将此功能包含到自包含运行时中,需要什么样的解决方法?
谢谢你。