[CP] have `Java.version` return null if `java --version` fails or cannot be run (#139698)

cherry-picks changes from https://github.com/flutter/flutter/pull/139614 onto the stable channel
diff --git a/packages/flutter_tools/lib/src/android/java.dart b/packages/flutter_tools/lib/src/android/java.dart
index 699fcfd..f1e2934 100644
--- a/packages/flutter_tools/lib/src/android/java.dart
+++ b/packages/flutter_tools/lib/src/android/java.dart
@@ -136,6 +136,10 @@
   /// Returns the version of java in the format \d(.\d)+(.\d)+
   /// Returns null if version could not be determined.
   late final Version? version = (() {
+    if (!canRun()) {
+      return null;
+    }
+
     final RunResult result = _processUtils.runSync(
       <String>[binaryPath, '--version'],
       environment: environment,
@@ -143,6 +147,7 @@
     if (result.exitCode != 0) {
       _logger.printTrace('java --version failed: exitCode: ${result.exitCode}'
         ' stdout: ${result.stdout} stderr: ${result.stderr}');
+      return null;
     }
     final String rawVersionOutput = result.stdout;
     final List<String> versionLines = rawVersionOutput.split('\n');
diff --git a/packages/flutter_tools/test/general.shard/android/java_test.dart b/packages/flutter_tools/test/general.shard/android/java_test.dart
index c7ff678..368f256 100644
--- a/packages/flutter_tools/test/general.shard/android/java_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/java_test.dart
@@ -183,7 +183,7 @@
       });
     });
 
-    group('getVersionString', () {
+    group('version', () {
       late Java java;
 
       setUp(() {
@@ -208,6 +208,23 @@
         );
       }
 
+      testWithoutContext('is null when java binary cannot be run', () async {
+        addJavaVersionCommand('');
+        processManager.excludedExecutables.add('java');
+
+        expect(java.version, null);
+      });
+
+      testWithoutContext('is null when java --version returns a non-zero exit code', () async {
+        processManager.addCommand(
+          FakeCommand(
+            command: <String>[java.binaryPath, '--version'],
+            exitCode: 1,
+          ),
+        );
+        expect(java.version, null);
+      });
+
       testWithoutContext('parses jdk 8', () {
         addJavaVersionCommand('''
 java version "1.8.0_202"