Имам проста програма за тестване, която има един бутон. Когато потребител щракне върху бутона, програмата трябва да създаде Runnable JAR. Runnable JAR е проста програма, която отваря google.com във Firefox. Програмата има три класа.
1) Main.java
package test;
public class Main {
public static void main(String[] args) {
Selenium.getGoogle();
}
}
2) Selenium.Java
package test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Selenium {
public static void getGoogle () {
WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");
}
}
3) TestGUI.java
package test;
import javax.swing.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestGUI extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
public TestGUI() {
setSize(200, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
* JButton.
*/
JButton startButton = new JButton("Create Runnable JAR file ! ");
add(startButton);
startButton.addActionListener(this);
}
public static void main(String[] args) {
new TestGUI();
}
public void actionPerformed(ActionEvent e) {
System.out.println("The Button Works");
String file1ToCompile = "test" + java.io.File.separator + "Main.java";
String file2ToCompile = "test" + java.io.File.separator + "Selenium.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, file1ToCompile, file2ToCompile);
if (compilationResult == 0) {
System.out.println("Compilation is successful");
} else {
System.out.println("Compilation Failed");
}
}
}
Имам два основни класа. Добавих TestGUI.java
към манифеста, така че GUI ще се покаже. След като потребител щракне върху бутона, искам моята програма да създаде Runnable JAR, който се състои от Main.java
и Selenium.java
.
Въпреки това получавам грешка null pointer exception
за int compilationResult = compiler.run(null, null, null, file1ToCompile, file2ToCompile);
Как мога да направя това?
compiler
е нула. Така че, когато се опитате да извикате.run()
на него, той хвърля изключение, защото няма никой вкъщи. Трябва да се опитате да донесете малко повече на партито; не можете наистина да копирате/поставите някакъв код от интернет, който не разбирате, и след това да очаквате да ви обясним как работи. - person Robert Harvey   schedule 08.02.2014ToolProvider.getSystemJavaCompiler();
връща null вместо екземпляра на компилатора. - person gadget   schedule 14.02.2014"test" + java.io.File.separator + "Main.java"
. Това е грешка, която чака да се случи. Използвайтеnew File(new File("test"), "Main.java")
. Или поне използвайте System.getProperty(file.separator). - person Paul Hicks   schedule 16.02.2014