由于某些原因,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启动器本地运行,则使用各种算法填充输出是没有问题的,但如果应用程序已打包为自包含,则会给出空列表。
然而,我也偶然发现了这一点:
默认情况下,只包括Java Runtime的一个子集。一些可选并且排除了很少使用的文件以减小包大小,例如所有可执行文件。如果您需要不包含在默认情况下,则需要将其作为后处理步骤进行复制。对于可安装程序包,您可以通过在填充所述自包含应用程序文件夹之后执行。看见第6.3.3节,"使用插入式资源进行定制。"
引用的段落可能是原因吗?需要什么样的变通方法才能将此功能包含在自包含运行时中?
谢谢。
查看此链接,默认情况下不会打包捆绑的JCE。