Выполнить Java-класс из VB.Net - PullRequest
1 голос
/ 30 января 2011

У меня есть класс в Java "Main.class", написал и хранится в% TEMP%.При выполнении класса через оболочку VB.Net, например:

Shell("cmd.exe /k java %TEMP%\Main.class")

Также при попытке выполнить вручную через CMD: «java% TEMP% \ Main.class» я получаю:1005 *

Однако, когда я запускаю Main.class вручную через compile.bat - класс работает нормально.В чем причина этого?

Ответы [ 3 ]

1 голос
/ 30 января 2011

Решение CoolBean должно работать.Что-то вроде

Shell("cmd.exe /k java -classpath %TEMP% Main")

Поскольку вы можете (и должны) опустить расширение .class.И, как сказал CoolBeans, вы устанавливаете каталог, в котором находится ваш файл класса, как classpath.

В то время как javac принимает файл, java принимает класс (другими словамиимя класса после 'public class'), а также то, в чем он находится packages (если у вас нет «packagething;» вверху вашего Java-файла, не беспокойтесьоб этом), и он будет искать этот класс в указанном вами пути к классам или текущем рабочем каталоге.

Если это в конечном итоге является решением, дайте CoolBeans принятый ответ.

Однако альтернативное решение состоит в том, чтобы изменить текущий рабочий каталог для Shell на% TEMP%, например:

IO.Directory.SetCurrentDirectory(Environ("TEMP"))
Shell("cmd.exe /k java Main")

Или, альтернативно, заглянуть в класс Process , который предлагает более точный контрольчерез запуск других программ (и с помощью Process вы также можете изменить каталог запускаемой программы, не изменяя текущий каталог вашего собственного приложения).

1 голос
/ 30 января 2011

Вам нужно добавить -classpath к нему.По сути, интерпретатор Java не знает, где найти этот «главный» класс.

0 голосов
/ 30 января 2011

Попробуйте,

Shell("java.exe -cp .;" & Environment.GetEnvironmentVariable("TEMP") & " Main")

ИЛИ

 Dim args As String = String.Format("-cp .;{0} {1}", Environment.GetEnvironmentVariable("TEMP"), "Main")

  Dim procInfo As New ProcessStartInfo
  procInfo.FileName = "java.exe"
  procInfo.Arguments = args

  Dim proc As New Process

  proc.StartInfo = procInfo
  proc.Start()
  proc.WaitForExit()
...