parse() should check if createDescriptions was already called
When using main parameters, createDescriptions can't be called twice, but it is possible to do so by using combinations of usage() and parse()
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 43198dc..d9e674d 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -183,7 +183,7 @@
     sb.append(join(args).append("\"\n  with:").append(join(m_objects.toArray())));
     p(sb.toString());
 
-    createDescriptions();
+    if (m_descriptions == null) createDescriptions();
     initializeDefaultValues();
     parseValues(expandArgs(args));
     validateOptions();
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index d661ccd..3af64ff 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -29,6 +29,7 @@
 import com.beust.jcommander.args.ArgsI18N2;
 import com.beust.jcommander.args.ArgsI18N2New;
 import com.beust.jcommander.args.ArgsInherited;
+import com.beust.jcommander.args.ArgsMainParameter1;
 import com.beust.jcommander.args.ArgsMaster;
 import com.beust.jcommander.args.ArgsMultipleUnparsed;
 import com.beust.jcommander.args.ArgsPrivate;
@@ -315,6 +316,15 @@
     new JCommander(a, argv);
   }
 
+  @Test
+  public void noParseConstructor() {
+    JCommander jCommander = new JCommander(new ArgsMainParameter1());
+    jCommander.usage();
+    // Before fix, this parse would throw an exception, because it calls createDescription, which
+    // was already called by usage(), and can only be called once.
+    jCommander.parse();
+  }
+
   public void usageShouldNotChange() {
     JCommander jc = new JCommander(new Args1(), new String[]{"-log", "1"});
     StringBuilder sb = new StringBuilder();