首页 / 浏览问题 / 组件GIS / 问题详情
iObjectjava11导入符号库后不能正常使用
9EXP 2022年08月03日

使用产品:iObjectjava11

操作系统:win11 x64
数据类型: 文件型
问题详细描述:将符号库通过组件编写代码导入工作空间后,通过IDesktop11打开保存的工作空间后,相关的专题图没有显示相应的符号,并且在编辑导入的符号时iDesktop出现卡死并且闪退情况,但是在IDesktop中导入相同的符号库后,功能正常,也能正常显示和编辑。并且在代码保存工作空间的过程中发现保存的工作空间文件会一致增大到270MB左右,代码执行完后工作空间文件又会变为10MB左右的一个文件

1、以下是导入符号库的代码

    public void importSymbol(String workspacePath, String... symbolFiles){
        initWorkSpace(workspacePath);
        // 工作空间资源
        Resources resources = workspace.getResources();
        for (String symbolFile : symbolFiles) {
            SymbolLibrary library ;
            if(symbolFile.endsWith(POINT_SYMBOL_SUFFIX)){
                // 点符号库
                library = resources.getMarkerLibrary();
            } else if (symbolFile.endsWith(LINE_SYMBOL_SUFFIX)){
                // 线型符号库
                library = resources.getLineLibrary();
            } else if (symbolFile.endsWith(FILL_SYMBOL_SUFFIX)){
                // 填充符号库
                library = resources.getFillLibrary();
            } else {
                throw new RuntimeException("符号库文件不符合规则");
            }
            library.fromFile(symbolFile);
        }
        saveWorkspace(workspace, new File(workspacePath));
    }

    private void initWorkSpace (String workspacePath) {
        workspace = new Workspace();
        workspaceConnectionInfo = new WorkspaceConnectionInfo();
        workspaceConnectionInfo.setType(WorkspaceType.SMWU);
        workspaceConnectionInfo.setServer(workspacePath);
        File file = new File(workspacePath);
        if(file.exists() && file.isFile()){
            workspace.open(workspaceConnectionInfo);
        } else {
            workspace.create(workspaceConnectionInfo);
        }
    }

    private boolean saveWorkspace(Workspace workspace, File file){
        boolean result = false;
        if(Objects.nonNull(workspace)){
            WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo(file.getAbsolutePath());
            result = workspace.saveAs(workspaceConnectionInfo);
        }
        return result;
    }

2、通过iDesktop导入的符号库打开界面

3、通过代码导入的符号库打开界面

希望大佬帮忙看一下是什么原因,

非常感谢!!!

1个回答

您好,您把您的组件版本号提供一下呢。

您这些符号是在符号库的根组中的吗,组件端使用的话,需要符号在根组中。

还有您代码中是workspce→getResources→getLineLibrary→getMarkerLibrary→fromFile 的路径处理的吗,Resources要从workspace取,不可以new新的哦。
9,653EXP 2022年08月03日
...