Coverage Summary for Class: DesktopLauncher (com.mygdx.game.desktop)

Class Class, % Method, % Line, %
DesktopLauncher 0% (0/1) 0% (0/3) 0% (0/39)


1 package com.mygdx.game.desktop; 2  3 import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; 4 import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; 5 import com.mygdx.game.PirateGame; 6  7 import java.io.BufferedReader; 8 import java.io.InputStream; 9 import java.io.InputStreamReader; 10 import java.lang.management.ManagementFactory; 11 import java.util.ArrayList; 12 import java.util.List; 13  14 import static com.mygdx.utils.Constants.*; 15  16 public class DesktopLauncher { 17  public static void main(String[] arg) { 18  // Hack around the -XstartOnFirstThread issue with Mac & libgdx 19  if (restartJVM()) { 20  return; 21  } 22  23  INIT_CONSTANTS(); 24  25  Lwjgl3ApplicationConfiguration cfg = new Lwjgl3ApplicationConfiguration(); 26  cfg.setTitle(VIEWPORT_TITLE); 27  28  if (FULLSCREEN) { 29  cfg.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode()); 30  } else { 31  cfg.setWindowedMode(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 32  } 33  34  if (!VSYNC) { 35  cfg.useVsync(false); 36  cfg.setForegroundFPS(0); 37  } 38  39  new Lwjgl3Application(new PirateGame(), cfg); 40  } 41  42  public static boolean restartJVM() { 43  44  String osName = System.getProperty("os.name"); 45  46  // if not a mac return false 47  if (!osName.startsWith("Mac") && !osName.startsWith("Darwin")) { 48  return false; 49  } 50  51  // get current jvm process pid 52  String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; 53  // get environment variable on whether XstartOnFirstThread is enabled 54  String env = System.getenv("JAVA_STARTED_ON_FIRST_THREAD_" + pid); 55  56  // if environment variable is "1" then XstartOnFirstThread is enabled 57  if (env != null && env.equals("1")) { 58  return false; 59  } 60  61  // restart jvm with -XstartOnFirstThread 62  String separator = System.getProperty("file.separator"); 63  String classpath = System.getProperty("java.class.path"); 64  String mainClass = System.getenv("JAVA_MAIN_CLASS_" + pid); 65  String jvmPath = System.getProperty("java.home") + separator + "bin" + separator + "java"; 66  67  List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments(); 68  69  ArrayList<String> jvmArgs = new ArrayList<String>(); 70  71  jvmArgs.add(jvmPath); 72  jvmArgs.add("-XstartOnFirstThread"); 73  jvmArgs.addAll(inputArguments); 74  jvmArgs.add("-cp"); 75  jvmArgs.add(classpath); 76  jvmArgs.add(mainClass); 77  78  try { 79  ProcessBuilder processBuilder = new ProcessBuilder(jvmArgs); 80  processBuilder.redirectErrorStream(true); 81  Process process = processBuilder.start(); 82  83  InputStream is = process.getInputStream(); 84  InputStreamReader isr = new InputStreamReader(is); 85  BufferedReader br = new BufferedReader(isr); 86  String line; 87  88  while ((line = br.readLine()) != null) { 89  System.out.println(line); 90  } 91  92  process.waitFor(); 93  } catch (Exception e) { 94  e.printStackTrace(); 95  } 96  97  return true; 98  } 99 }