{"record":{"id":"6dd5eb263b965dcf","repo":"java-native-access/jna","slug":"commandline-parameter-not-found-key","errorCode":null,"errorMessage":"Commandline parameter not found: <key>","messagePattern":"Commandline parameter not found: <key>","errorType":"exception","errorClass":"com.sun.jna.platform.win32.COM.tlb.imp.TlbParameterNotFoundException","httpStatus":null,"severity":"error","filePath":"contrib/platform/src/com/sun/jna/platform/win32/COM/tlb/imp/TlbCmdlineArgs.java","lineNumber":47,"sourceCode":"    private static final long serialVersionUID = 1L;\n\n    public TlbCmdlineArgs(String[] args) {\n        this.readCmdArgs(args);\n    }\n\n    public int getIntParam(String key) {\n        String param = this.getRequiredParam(key);\n        return Integer.parseInt(param);\n    }\n\n    public String getParam(String key) {\n        return this.get(key);\n    }\n\n    public String getRequiredParam(String key) {\n        String param = this.getParam(key);\n        if (param == null)\n            throw new TlbParameterNotFoundException(\n                    \"Commandline parameter not found: \" + key);\n\n        return param;\n    }\n\n    private void readCmdArgs(String[] args) {\n        if (args.length < 2)\n            this.showCmdHelp();\n\n        for (int i = 0; i < args.length;) {\n            String cmdName = args[i];\n            String cmdValue = args[i+1];\n            if (cmdName.startsWith(\"-\") && !cmdValue.startsWith(\"-\")) {\n                this.put(cmdName.substring(1), cmdValue);\n                i+=2;\n            }else {\n                this.showCmdHelp();\n                break;","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/java-native-access/jna/blob/d036ad9781adad4b66693e8fa7098e4ac665e0a3/contrib/platform/src/com/sun/jna/platform/win32/COM/tlb/imp/TlbCmdlineArgs.java#L29-L65","documentation":"TlbCmdlineArgs.getRequiredParam retrieves a command-line parameter and throws TlbParameterNotFoundException when no value exists for the given key. It enforces that mandatory options were supplied to the COM type-library importer. The message names the missing key so you can see which option is absent.","triggerScenarios":"Calling TlbCmdlineArgs.param/getRequiredParam (directly or via TlbImp) for a key such as 'tlb' or 'output' that was never passed on the command line, or passed with wrong spelling/missing '=' separator.","commonSituations":"Invoking com2java from an Ant/CI script with an incomplete argument list; upgrading JNA's contrib tool and a previously optional parameter becoming required; forgetting quoting so one of two arguments is lost.","solutions":["Add the missing parameter to the com2java command line (check the key name shown in the message)","Verify argument syntax expected by TlbCmdlineArgs (key=value pairs)","Wrap the generator invocation in a script that validates required args before running","If the param is genuinely optional in your flow, use getParam instead of getRequiredParam"],"exampleFix":"// before\njava -jar com2java.jar -output C:\\out mylib.tlb\n// after\njava -jar com2java.jar -tlb mylib.tlb -output C:\\out -package com.mylib.jna","handlingStrategy":"validation","validationCode":"Map<String,String> args = parse(argsArray);\nfor (String required : List.of(\"tlb\", \"output\")) {\n    if (!args.containsKey(required)) throw new IllegalArgumentException(\"missing arg: \" + required);\n}","typeGuard":null,"tryCatchPattern":"try { String tlb = cmdArgs.getRequiredParam(\"tlb\"); } catch (TlbParameterNotFoundException e) { /* print usage with e.getMessage() */ }","preventionTips":["Keep the com2java invocation in a reviewed script with all required args","Validate command-line args before calling the generator","Print usage on missing keys"],"tags":["java","com","cli","codegen","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"d036ad9781adad4b66693e8fa7098e4ac665e0a3","analyzedAt":"2026-09-12T06:50:59.239Z","contentChangedAt":"2026-09-12T06:50:59.239Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}