Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFx中带有命令行参数的NoClassDefFoundError和Selenium代码?_Java_Selenium_Javafx 2_Javafx_Javafx 8 - Fatal编程技术网

JavaFx中带有命令行参数的NoClassDefFoundError和Selenium代码?

JavaFx中带有命令行参数的NoClassDefFoundError和Selenium代码?,java,selenium,javafx-2,javafx,javafx-8,Java,Selenium,Javafx 2,Javafx,Javafx 8,我正在尝试做一个JavaFX应用程序,它可以接收命令行参数。我可以接收参数。但是,当我实例化包含Selenium(测试/WebBrowser自动化库)成员的“A”类(来自Main.java)时,我遇到了问题 // Main.java package myPackage; import java.util.Map; import javafx.application.Application; import javafx.stage.Stage; public class Main extend

我正在尝试做一个JavaFX应用程序,它可以接收命令行参数。我可以接收参数。但是,当我实例化包含Selenium(测试/WebBrowser自动化库)成员的“A”类(来自Main.java)时,我遇到了问题

// Main.java
package myPackage;

import java.util.Map;
import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        if (getParameters().getRaw().isEmpty() == false) {
            System.out.println("The application was called by Command Line.");
            Map<String, String> params = getParameters().getNamed();
            System.out.println(params.get("a"));            
            A myA = new A();
        } else {
            System.out.println("The application was called executing the jar file.");
            A myA = new A();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }

}
但是当我尝试使用以下命令执行它时:
java-cp MyProject.jar myPackage.Main--a=“value1”

如您所见,应用程序获取参数并打印它(上面输出的第一行和第二行)

我读到了这行代码:org/openqa/selenium/NoSuchElementException,但是添加了selenium库(2.37.0)和libs依赖项。在Netbeans中的
Libraries>Compile
选项卡

如果我使用Netbeans
projectproperties>run>parameters
运行应用程序并插入一个参数,那么一切都很好。当我通过命令行执行同样的操作时,问题就出现了


我试过很多东西。。。我不明白,为什么?

@KnutArneVedaa感谢您的评论。我是PHP程序员,对Java几乎一无所知。但是你的见解让我明白了类路径就像PHP中的路径一样,只是一个环境变量,它帮助我解决了我的问题

我只是显式地将classpath目录定义到我的当前目录(项目目录),因为“.”是默认值,是可选的,然后我使用-jar标志指定jar文件lol

java-cp'.-jar MyProject.jar myPackage.Main--a=“value1”

它起作用了!传递参数和ChromeDriver实例化


再次感谢你;)

在执行应用程序时,可能需要将库添加到类路径中。在Netbeans中执行的操作仅在从Netbeans启动时生效。
// A.java
package myPackage;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.chrome.ChromeDriver;

public class A {

    ChromeDriver driver;

    A() {
        System.out.println("New A Instance.");
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
        this.driver = new ChromeDriver();
    }

    public boolean isElementPresent(By by) {
        try {
            this.driver.findElement(by);
            return true;
        } catch (NoSuchElementException ex) {
            return false;
        }
    }
}
The application was called by Command Line.
value1
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/NoSuchElementException
        at myPackage.Main.start(Main.java:16)
        at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
        at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:331)
        at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:297)
        at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:294)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
        at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
        ... 1 more
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.NoSuchElementException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:359)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 12 more
Exception running application myPackage.Main