{"record":{"id":"dc14c6067d4578c0","repo":"asLody/VirtualApp","slug":"initializer-null","errorCode":null,"errorMessage":"Initializer = NULL","messagePattern":"Initializer = NULL","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"VirtualApp/lib/src/main/java/com/lody/virtual/client/core/VirtualCore.java","lineNumber":230,"sourceCode":"\n    public boolean isEngineLaunched() {\n        String engineProcessName = getEngineProcessName();\n        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n        for (ActivityManager.RunningAppProcessInfo info : am.getRunningAppProcesses()) {\n            if (info.processName.endsWith(engineProcessName)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public String getEngineProcessName() {\n        return context.getString(R.string.engine_process_name);\n    }\n\n    public void initialize(VirtualInitializer initializer) {\n        if (initializer == null) {\n            throw new IllegalStateException(\"Initializer = NULL\");\n        }\n        switch (processType) {\n            case Main:\n                initializer.onMainProcess();\n                break;\n            case VAppClient:\n                initializer.onVirtualProcess();\n                break;\n            case Server:\n                initializer.onServerProcess();\n                break;\n            case CHILD:\n                initializer.onChildProcess();\n                break;\n        }\n    }\n\n    private void detectProcessType() {","sourceCodeStart":212,"sourceCodeEnd":248,"githubUrl":"https://github.com/asLody/VirtualApp/blob/666fefcb5d3f39cc944001c3457c38ffd6544c87/VirtualApp/lib/src/main/java/com/lody/virtual/client/core/VirtualCore.java#L212-L248","documentation":"VirtualCore.initialize(VirtualInitializer) requires a non-null initializer object whose callbacks (onMainProcess/onVAppClientProcess/etc.) are invoked per process type. Passing null makes it impossible to dispatch per-process initialization, so the library throws this IllegalStateException.","triggerScenarios":"Calling VirtualCore.get().initialize(null) — typically a refactoring leftover or a conditional initializer variable that evaluated to null.","commonSituations":"Dependency-injected or config-driven initializer not constructed yet at init time; copy-pasted boilerplate call with the argument dropped.","solutions":["Pass a concrete VirtualInitializer implementation implementing the callbacks needed for your process type","If a process needs no special init, pass an empty VirtualInitializer instance instead of null","Guard the call site: only invoke initialize() after the initializer object is constructed"],"exampleFix":"// before\nVirtualCore.get().initialize(null);\n// after\nVirtualCore.get().initialize(new VirtualInitializer() {\n    @Override public void onMainProcess() { }\n    @Override public void onVAppClientProcess() { }\n});","handlingStrategy":"validation","validationCode":"VirtualInitializer init = provideInitializer(); if (init == null) init = new VirtualInitializer() { @Override public void onMainProcess() {} };\nVirtualCore.get().initialize(init);","typeGuard":"VirtualInitializer safeInit(VirtualInitializer i) { return i != null ? i : new VirtualInitializer() {}; }","tryCatchPattern":"try { core.initialize(init); } catch (IllegalStateException e) { core.initialize(new VirtualInitializer() {}); }","preventionTips":["Never pass null; pass an empty VirtualInitializer for no-op per-process setup","Construct the initializer before engine initialization","Add unit checks in CI for null config-derived initializers"],"tags":["android","null-argument","initialization"],"backgroundTag":"null-argument","analyzedSha":"666fefcb5d3f39cc944001c3457c38ffd6544c87","analyzedAt":"2026-09-09T11:09:01.694Z","contentChangedAt":"2026-09-09T11:09:01.694Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}