programing

명령 줄에서 java .class를 실행하는 방법

nasanasas 2020. 8. 13. 23:28
반응형

명령 줄에서 java .class를 실행하는 방법


컴파일 된 자바 클래스가 있습니다.

Echo.class

public class Echo {
    public static void main (String arg) {

            System.out.println(arg);
    }
}

I cd디렉토리로 이동하여 다음을 입력합니다.java Echo "hello"

이 오류가 발생합니다.

C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo.  Program will exit.

Eclipse IDE를 사용해야하는 것과 같이 명령 줄에서 실행할 수있는 형식으로 Java 코드를 얻는 가장 간단한 방법은 무엇입니까?


시험:

java -cp . Echo "hello"

다음으로 컴파일했다고 가정합니다.

javac Echo.java 

그러면 "현재"디렉토리가 클래스 경로에 없을 가능성이 있습니다 (java가 .class 정의를 찾습니다).

이 경우 디렉토리의 내용이 표시됩니다.

Echo.java
Echo.class

그러면 다음 중 하나가 작동 할 수 있습니다.

java -cp . Echo "hello"

또는

SET CLASSPATH=%CLASSPATH;.  

java Echo "hello"

나중에 Fredrik이 지적한 것처럼 다른 오류 메시지가 표시됩니다.

스레드 "main"java.lang.NoSuchMethodError : main 예외

그럴 때 가서 그의 대답을 읽으십시오 :)


클래스 경로를 지정해야합니다. 이렇게해야합니다.

java -cp . Echo "hello"

이것은 자바가 .(현재 디렉토리)를 클래스 경로, 즉 클래스를 찾는 장소 로 사용하도록 지시 합니다. 패키지를 사용할 때 클래스 경로에는 패키지 하위 디렉터리가 아닌 루트 디렉터리가 포함되어야합니다. 예를 들어 클래스가 my.package.Echo이고 .class 파일이 bin/my/package/Echo.class이면 올바른 클래스 경로 디렉토리는 bin입니다.


유효한 기본 메서드가 없습니다 ... 서명은 다음과 같아야합니다. public static void main ( String [] args);

따라서 귀하의 경우 코드는 다음과 같습니다.

public class Echo {
    public static void main (String[] arg) {

            System.out.println(arg[0]);
    }
}

편집 : 당신이 누락되었다는 점에서 Oscar 가 옳다는 점에 유의하십시오 . 클래스 경로에서 해당 오류를 처리 한 후 내가 해결하는 문제에 부딪 힐 것입니다.


Java 11을 사용하면 더 이상이 rigmarole을 통과 할 필요가 없습니다!

대신 다음을 수행 할 수 있습니다.

> java MyApp.java

You don't have to compile beforehand, as it's all done in one step.

You can get the Java 11 JDK here: JDK 11 GA Release


There could be several things wrong - here is a tutorial that should get you started: Running Java as a Command Line Application.


My situation was a little complicated. I had to do three steps since I was using a .dll in the resources directory, for JNI code. My files were

S:\Accessibility\tools\src\main\resources\dlls\HelloWorld.dll
S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.class

My code contained the following line

System.load(HelloWorld.class.getResource("/dlls/HelloWorld.dll").getPath());

First, I had to move to the classpath directory

cd /D "S:\Accessibility\tools\src\test\java"

Next, I had to change the classpath to point to the current directory so that my class would be loaded and I had to change the classpath to point to he resources directory so my dll would be loaded.

set classpath=%classpath%;.;..\..\..\src\main\resources; 

Then, I had to run java using the classname.

java com.accessibility.HelloWorld 

If you have in your java source

package mypackage;

and your class is hello.java with

public class hello {

and in that hello.java you have

 public static void main(String[] args) {

Then (after compilation) changeDir (cd) to the directory where your hello.class is. Then

java -cp . mypackage.hello

Mind the current directory and the package name before the class name. It works for my on linux mint and i hope on the other os's also

Thanks Stack overflow for a wealth of info.


First, have you compiled the class using the command line javac compiler? Second, it seems that your main method has an incorrect signature - it should be taking in an array of String objects, rather than just one:

public static void main(String[] args){

Once you've changed your code to take in an array of String objects, then you need to make sure that you're printing an element of the array, rather than array itself:

System.out.println(args[0])

If you want to print the whole list of command line arguments, you'd need to use a loop, e.g.

for(int i = 0; i < args.length; i++){
    System.out.print(args[i]);
}
System.out.println();

참고URL : https://stackoverflow.com/questions/1279542/how-to-execute-a-java-class-from-the-command-line

반응형