#java
#java
Вопрос:
Изображение структуры папок: структура папок моего проекта
Я пытаюсь создать исполняемый файл jar из eclipse.. У меня есть 3 класса в пакете Java, в котором один класс является основным классом, а другие 2 класса содержат некоторые методы, которые есть в основном классе. Я проверил онлайн и создал файл jar, но он не выполняет вывод из других методов класса.. насколько я знаю, я запустил то же самое в eclipse, и он выдает результат, но когда я запускаю его из исполняемого файла jar, он не выполняет методы других классов. итак, может ли кто-нибудь, пожалуйста, помочь мне создать файл jar.
Я создал файл jar, выполнив шаги на этом сайте
https://www.java67.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
Изображение пользовательского интерфейса
когда пользователь нажимает на кнопку Generate, он запускает выполнение метода, который находится в том же классе, и внутри этого метода я вызываю метод другого класса.
Метод
public static String generateOutput(String url, String tagName) {
XpathUITest output = new XpathUITest();
try {
return output.xpathBuilder(url, tagName);
} catch (IOException | InterruptedException e) {
return "Failed with exceotion, please try again";
}
}
Сгенерировать код выполнения кнопки
bj.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel j = null;
url = userInput.getText();
if(!url.startsWith("http") || !url.startsWith("https")){
url="";
}
locType = combo.getSelectedItem().toString();
tagName = comboTags.getSelectedItem().toString();
boolean executeOutput = false;
JPanel output = new JPanel(new BorderLayout(4, 4));
output.setPreferredSize(new DimensionUIResource(500, 350));
JPanel resOpJP = new JPanel(new GridLayout(0, 1, 4, 4));
resOpJP.add(new JLabel("Output : ", SwingConstants.LEFT));
JButton downLoad = new JButton("Download in file");
JPanel Message = new JPanel();
if (url.isEmpty()
amp;amp; (selectedFile != null amp;amp; selectedFile.endsWith(".html") amp;amp; !selectedFile.isEmpty())) {
j = new JLabel("Selected File/URL is " selectedFile, SwingConstants.RIGHT);
inputPath = selectedFile;
executeOutput = true;
} else if ((url.startsWith("http") || url.startsWith("https"))
amp;amp; (selectedFile == null || selectedFile.isEmpty())) {
j = new JLabel("Selected File/URL is " url, SwingConstants.RIGHT);
inputPath = url;
executeOutput = true;
} else if ((url==null ||url.isEmpty()) amp;amp; (selectedFile == null || selectedFile.isEmpty())) {
JOptionPane.showMessageDialog(Message, "Please provide a valid html file / provide a URL", "Error",
JOptionPane.ERROR_MESSAGE);
} else if (selectedFile != null amp;amp; !selectedFile.isEmpty()) {
if (selectedFile.contains("html") amp;amp; !(new File(selectedFile).exists())) {
JOptionPane.showMessageDialog(Message, "Please provide a valid html file path", "Error",
JOptionPane.ERROR_MESSAGE);
selectedFile = "";
} else if (!selectedFile.endsWith(".html") amp;amp; (new File(selectedFile).exists())) {
JOptionPane.showMessageDialog(Message, "Please provide a valid html file", "Error",
JOptionPane.ERROR_MESSAGE);
selectedFile = "";
}
} else if (!url.isEmpty() amp;amp; (!url.startsWith("http") || !url.startsWith("https"))) {
JOptionPane.showMessageDialog(Message, "Please provide a valid URL", "Error",
JOptionPane.ERROR_MESSAGE);
}
if (locType.contains("Select Locator") || tagName.contains("Select Tag")) {
executeOutput = false;
JOptionPane.showMessageDialog(Message, "Locator Type and Tag is mandatory", "Error",
JOptionPane.ERROR_MESSAGE);
} else if (!locType.contains("Select Locator") amp;amp; !tagName.contains("Select Tag")) {
executeOutput = true;
}
if (executeOutput) {
///*****This is the step where other class method invoke***///
xpathUI.expectedOutput = generateOutput(inputPath, tagName);
if (xpathUI.expectedOutput.equals("No html tag found in the provided html")) {
JOptionPane.showMessageDialog(new JPanel(), xpathUI.expectedOutput, "Information",
JOptionPane.WARNING_MESSAGE);
} else if(xpathUI.expectedOutput.contains("Error")){
JOptionPane.showMessageDialog(new JPanel(), xpathUI.expectedOutput, "Error Message",
JOptionPane.ERROR_MESSAGE);
}else {
downLoad.addActionListener(new ActionListener() {
@SuppressWarnings("null")
@Override
public void actionPerformed(ActionEvent e) {
JFrame jF = new JFrame();
jF.setSize(300, 300);
choose = new JFileChooser();
choose.showSaveDialog(jF);
choose.setCurrentDirectory(new File(System.getProperty("user.home")));
choose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
try {
String saveFile = "";
try {
saveFile = choose.getSelectedFile().getAbsolutePath();
System.out.println(saveFile);
} catch (Exception ex) {
saveFile = "";
}
if ((saveFile != null || !saveFile.isEmpty())
amp;amp; !saveFile.split(".txt")[0].isEmpty()) {
FileOutputStream fout = new FileOutputStream(new File(saveFile));
fout.write(xpathUI.expectedOutput.getBytes());
fout.flush();
fout.close();
if (new File(saveFile).exists()) {
JOptionPane.showMessageDialog(new JPanel(),
"Locator file saved successfully at :n" saveFile,
"Confirmation Message", JOptionPane.INFORMATION_MESSAGE);
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
j.setFont(new FontUIResource("Arial", Font.PLAIN, 10));
resOpJP.add(j);
output.add(resOpJP, BorderLayout.LINE_START);
JPanel text = new JPanel(new GridLayout(0, 1));
JTextArea jta = new JTextArea();
jta.setText("");
jta.setText(xpathUI.expectedOutput);
jta.setLineWrap(true);
jta.setRows(15);
jta.setColumns(1);
text.add(jta);
output.add(text, BorderLayout.PAGE_END);
JOptionPane.showOptionDialog(null, output, "XPATH Generator : Output", JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, new Object[] { downLoad }, null);
}
}
}
});
Комментарии:
1. Привет и добро пожаловать. Можете ли вы поделиться своим кодом? Как вы запустили исполняемый файл jar? Покажите пример того, как вы его выполнили, и какой результат был получен из этого, а также из Eclipse.
2. Вы получаете какую-то ошибку, связанную с Main() не найдено. Вызывается ли ваш main(), и вы получаете ClassNotFoundException для других 2 классов. Если проблема с main(), попробуйте это — java -cp MyJar.jar com.mycomp.myproj.classwithmainметод
3. @DarkMatter, я обновил свой вопрос изображением и кодом … для вашего удобства я добавил комментарий в коде, где этот метод начнет выполняться…
4. @PrateekPande, поскольку я новичок в этом, я не знаю, как просмотреть журналы выполнения jar .. можете ли вы помочь мне получить журналы выполнения jar…
5. Да, наконец, когда я запустил его из cmd .. я получил журнал выполнения, и он не получает зависимостей для класса .. для этого требуется JSoup, и выполнение завершается сбоем с
NoClassDefFoundError:org/jsoup/Jsoup
Ответ №1:
Я обобщу решение. Зависимые библиотеки не были упакованы в JAR. Таким образом, в результате
NoClassDefFoundError:org/jsoup/Jsoup
Таким образом, переупаковка зависимости jsoup с использованием maven https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
решена эта проблема.
Быстрым решением было скопировать сгенерированный jar с помощью IDE.