#java
#java
Вопрос:
В настоящее время я добавляю VBS script
for hMailServer
в свой Java-код для настройки сервера перед запуском моего клиента JavaMail. Все работает через eclipse, однако, когда я экспортирую в исполняемый jar, я думаю, что путь к файлу неверен. например, через eclipse я вижу cscript C:UsersusernameDesktopRadioWithEmailtargetclassesscripthmail-create-account1.vbs user password test.au
, что работает отлично. Из исполняемого jar, который я получаю cscript file:C:UsersusernameDesktopNeoChat.jar!scripthmail-create-account1.vbs user password test.au
ниже, мой код. Какую ошибку я допустил в отношении получения пути к файлу? Приветствуются любые советы. Заранее спасибо.
public class emailLogin {
private Stage primaryStage;
private PersistenceAccess persistenceAccess = new PersistenceAccess();
private User me;
private Settings settings;
private EmailManager emailManager = new EmailManager(settings);
private File f;
private MainUiController ui;
public emailLogin(Stage stage, final Settings settings, MainUiController ui) throws Exception {
this.settings = settings;
this.ui = ui;
me = settings.getMe();
String user = me.getNick();
String ip = me.getIpAddress();
String emailaddress = user "@" ip;
/* Routine to bring the account onto hMailserver */
f = new File(getClass().getResource("/script/hmail-create-account1.vbs").getFile());
// String path = f.getPath();
// String pathto =('"' path '"');
System.out.println("cscript " f " " user " " "password" " " ip);
Runtime.getRuntime().exec("cscript " f " " user " " "password" " " ip);
ViewFactory viewFactory = new ViewFactory(emailManager);
List<ValidAccount> validAccounts = persistenceAccess.loadFromPersistence();
if (validAccounts.size() > 0) {
viewFactory.showMainWindow(settings, ui);
for (ValidAccount validAccount : validAccounts) {
EmailAccount emailAccountupdate = new EmailAccount(validAccount.getAddress(),
validAccount.getPassword(), me.getIpAddress());
LoginService loginService = new LoginService(emailAccountupdate, emailManager, settings, ui);
loginService.start();
}
} else {
viewFactory.showLoginWindow(settings, ui);
}
}
public void stop() throws Exception {
List<ValidAccount> validAccounts = new ArrayList<ValidAccount>();
for (EmailAccount emailAccount : emailManager.getEmailAccounts()) {
validAccounts.add(new ValidAccount(emailAccount.getAddress(), emailAccount.getPassword()));
}
persistenceAccess.savePersistence(validAccounts);
}
}
Комментарии:
1. Должны ли пути быть разными для двух случаев? То есть вы хотите, чтобы скрипт .vbs выходил из файла .jar? Я предполагаю, что
C:UsersusernameDesktopNeoChat.jar
откуда берется код, когда вы запускаете его как .jar. Если ответ «Да», то в чем именно проблема? Этот файл не найден в .jar? Вы, кажется, говорите, что путь неверен. Как это неправильно? Какие сообщения об ошибках вы получаете? Я думаю, что вам было бы очень полезно более подробно объяснить, что происходит, когда вы запускаете его из .jar.2. Спасибо Стиву и приношу извинения за любую путаницу, когда я запускаю из jar, скрипт не найден и не запущен. Он отлично работает из eclipse. Ваше предположение о C:UsersusernameDesktopNeoChat.jar для банки это правильно. Да, я хочу, чтобы скрипт запускался из jar, чтобы его можно было запускать на любом компьютере. Надеюсь, это имеет смысл
3. Имеет смысл. Итак, возникает вопрос, почему он не найден в .jar. Чтобы это работало, в пути к классу должен быть каталог с именем
scripts
, и этот каталог должен содержать скриптhmail-create-account1.vbs
. Вы смотрели, что на самом деле находится в файле .jar? Является ли сценарий тем, где вы его ожидаете? В конечном счете, вы должны быть в состоянии диагностировать это, распечатав путь к классу из вашего кода или просмотрев его в вашем отладчике. Затем, глядя на этот результат и содержимое .jar, он должен быть черно-белым относительно того, что происходит.4. можете ли вы выполнить f.exists() и проверить, существует ли файл после того, как вы получили его из ресурсов. Кроме того, вы можете сделать jar tf your.jar и подтвердите, существует ли файл в jar. Более того, я не слишком уверен, будет ли вам разрешено выполнять двоичный файл из файла jar без его извлечения. Я бы предложил разместить ваши ресурсы рядом с файлом jar и предоставить ресурс в виде командной строки в jar, а затем запустить вместо того, чтобы связывать его с jar
5. Привет, Стив, да, у меня есть несколько каталогов в папке ресурсов, и один называется scripts, где у меня есть скрипт. У меня также есть каталог для моих файлов fxml с именем fxml плюс другие, например, значки и т.д. . Я вижу файл внутри jar. Извинения, Стив, однако я не уверен, что вы имеете в виду, распечатывая путь к классу из вашего кода или просматривая его в вашем отладчике, поскольку я новичок, все остальные работают нормально