@Override
	public void launch(GhidraApplicationLayout layout, String[] args) throws Exception {
		ApplicationConfiguration configuration = null;
		try {
			if (!Application.isInitialized()) {
				System.setProperty(ApplicationProperties.APPLICATION_NAME_PROPERTY, "GhidraGo");
				configuration = new DockingApplicationConfiguration();
				Application.initializeApplication(layout, configuration);
			}
			if (args != null && args.length > 0) {
				ghidra.framework.protocol.ghidra.Handler.registerHandler();
				sender = new GhidraGoSender();
				// check if ghidra url is valid
				GhidraURL.getProjectURL(new URL(args[0]));

				startGhidraIfNeeded(layout);

				sender.send(args[0]);
				// if configuration is null, probably running inside a test
				if (configuration != null) {
					// calling System.exit explicitly is necessary, otherwise the Loading... screen
					// persists instead of closing when complete.
					System.exit(0);
				}
			}
			else {
				throw new IllegalArgumentException();
			}
		}
		catch (IllegalArgumentException e) {
			System.err.println("\n" + "USAGE: ghidraGo <ghidraURL>\n\n" +
				"Ghidra URL Forms (ghidraURL):\n" +
				"    ghidra://<hostname>[:<port>]/<repo-name>[/<folder-path>[/<program-name>]]\n" +
				"    ghidra:/[<local-dirpath>/]<project-name>[?/<folder-path>[/<program-name>]]\n");
		}
		catch (FailedToStartGhidraException e) {
			logOrShowError("GhidraGo Start Ghidra Exception",
				"Failed to start Ghidra from GhidraGo", e);
		}
		catch (StopWaitingException e) {
			// do nothing
		}
		catch (Exception e) {
			logOrShowError("GhidraGo Exception", "An unexpected exception occurred in GhidraGo", e);
		}
		// if configuration is null, probably running inside a test
		if (configuration != null) {
			// calling System.exit explicitly is necessary, otherwise the Loading... screen
			// persists instead of closing when complete.
			System.exit(-1);
		}
	}
Initializes a new GhidraGoSender and processes the {@link GhidraURL}
@param layout the layout passed from main.Ghidra
@param args the CLI args passed to GhidraGo. args should contain a single {@link GhidraURL}.
@throws Exception in the event of an error
Ghidra/Features/GhidraGo/src/main/java/ghidra/GhidraGo.java