Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.
Для Ex:
SqlConnection connection = null;
connection.Open();
Когда вы запускаете это кода, вы получите:
System.NullReferenceException: Object reference not set to an instance of an object.
Вы можете избежать этой ошибки, например, следующим образом:
if (connection != null){
connection.Open();
}
Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.
Проблема в том, что PS почему-то разбирает -Dresourcepath=.
иначе, чем cmd. Что работает
java -cp '.;.\common.jar' -Dcontext=atest1 "-Dresourcepath=." DW_Install
Не имеет значения, в каком направлении идет слэш, и не имеет значения, какие кавычки используются ('
или "
). Однако путь класса должен быть экранирован какими-то кавычками. Хороший тест, чтобы понять, что получает переводчик PS, - это повторить его. Следующее:
echo java -cp '.;.\common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install
выводит следующий результат:
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=
.
DW_Install
(Обратите внимание, что путь ресурса и значение пути к ресурсу не находятся в одной строке.) Если вывод в
echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install
дает следующий результат:
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install
Это намного больше по душе.
Хотя я этого не желаю никому из вас, я надеюсь что этот пост помогает тем из вас, которые должны развертывать java-проекты на компьютерах Windows (хотя они никогда не будут работать на какой-либо другой платформе).
start-process -nnw java "-cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install"
Другой пример, основанный на https://gaming.stackexchange.com/questions/24543/how-do-i-change-player-name-in-minecraft-multiplayer-in-offline-mode-in- linux
function mineCraftAs {
Param (
[parameter(mandatory=$true, HelpMessage="Minecraft character name." ,ValueFromPipeline=$true)]
[string] $name
)
if(!(test-path $env:appdata)) { $(throw "Appdata not found at $env:appdata")}
$private:minecraftPath=Join-Path $env:appdata .minecraft
if(!(test-path $minecraftPath)) { $(throw "Minecraft not found at $minecraftpath")}
$private:minebinPath=join-path $minecraftPath "bin"
if(!(test-path $minebinPath)) { $(throw "Minecraft bin not found at $minebinPath")}
$minebinPath | write-debug
gci $minebinpath | write-debug
#java -Xms512m -Xmx1024m -cp "%APPDATA%/.minecraft\bin\*" -Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft '"'%1'"'
echo java -Xms512m -Xmx1024m -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name)
$minecraftJob=& 'C:\Program Files (x86)\Java\jre6\bin\java.exe' -Xms512m -Xmx1024m -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name)
}
minecraftas newbie
Должно работать следующее:
java.exe -cp '.;./common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install
Я полагаю, что PowerShell интерпретирует ;
в пути к классам как разделитель команд, тем самым пытаясь запустить java -cp .
и ./common.jar -D...
.
Запуск внешних программ командной строки из PowerShell иногда бывает проблематичным, потому что PowerShell предоставляет два разных режима синтаксического разбора, которые вызывают различные синтаксисы указанных внешних программ.
В любом случае, запуск команды в Powershell требуется использовать префикс .
( dot- "sourcing" ) или оператор &
.
Вы можете обойти это, передав каждый параметр во внешнюю программу как отдельные переменные, например:
PS> $classpath = ".;./common.jar"
PS> $env = "-Dcontext=atest1 -Dresourcepath=."
PS> $class = "DW_Install"
PS> . java.exe -cp $classpath $env $class