我有一个文件A.java
,其中包含一个类A
,其方法aMethod()
保存在PC上的文件夹中(不在包或工作区内)。
我在另一个班级JFileChooser
上有GUI
。
我希望能够选择课程A
并运行它,或使用A::aMethod()
致电JFileChooser
。
这可能吗?
答案 0 :(得分:0)
您需要将类A
加载到自定义类加载中,以便执行它。
这涉及到许多问题。第一个围绕包名称,第二个围绕实际调用类方法。
以下示例基本上使用URLClassLoader
指向类的目录,这些类是布局我们在那里正确的包结构。本质上为自定义类加载器提供了它的类路径
try {
URLClassLoader classLoader = new URLClassLoader(new URL[] {new File("path/to/classes/").toURI().toURL()});
Class<?> loadClass = classLoader.loadClass("dynamicclasses.TestClass");
Object newInstance = loadClass.newInstance();
System.out.println(newInstance);
} catch (Exception ex) {
ex.printStackTrace();
}
该示例还依赖于加载的类toString
方法来返回结果。在我的测试中,我只是转储类类加载器引用。
第二个问题有点难以克服。你有两个基本选择。
我更喜欢第一个选项,但它确实意味着如果您更改界面,则需要再次编译双方。
答案 1 :(得分:0)
所以我取得了一些进展。不是我想去的地方,但它很好......
我的GUI有一个按钮,可执行以下操作:
btnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
runFAQm();
}
});
单击按钮时在GUI中调用的方法是runsFAQm()。方法runFAQm()使用Runtime运行保存在其他目录中的java文件。
public static void runFAQm(){
try {
String[] cmdArray = new String[2];
// first argument is the program we want to open
cmdArray[0] = "java";
// second argument is a txt file we want to open with notepad
cmdArray[1] = "FAQm";
// print a message
// create a file which contains the directory of the file needed
File dir = new File(
"c:/Documents and Settings/AESENG/My Documents/MK/Selenium_Practice/workspace/TestCDM/src");
// create a process and execute cmdArray and currect environment
Process p = Runtime.getRuntime().exec(cmdArray, null, dir);
BufferedReader in = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
textArea.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
通过runFAQm()方法内的runtime()运行的java文件(称为FAQm.java)启动Firefox浏览器。我当然有太阳Javac。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
public class FAQm {
static WebDriver driver = new FirefoxDriver();
public static void main(String[] args) throws Exception {
System.out.print("inside FAQm main" );
}
我现在的问题是我可以从命令行和eclipse运行Class FAQm,但是当我通过点击按钮从GUI运行它时它会挂起。它仅在启动Webdriver时挂起。如果我注释掉//静态WebDriver driver = new FirefoxDriver();程序运行正常。