标签: javac

错误:无法找到或加载主类 HelloWorld

我在 Git Bash 中创建了一个 HelloWorld.java 文件

 $vi HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

然后插入以下内容:

   class Hello { 
        public static void main (String[] arguments) {              
            System.out.println ("Hello, world!");
       }
    }
Run Code Online (Sandbox Code Playgroud)

按 esc 并写入 :wq!

然后我尝试调用该程序。

  $ls
  HelloWorld.java
  $javac HelloWorld.java
  $ls
  Hello.class HelloWorld.Java
  $ java HelloWorld
  Error: Could not find or load main class HelloWorld
  Caused by: java.lang.ClassNotFoundException: HelloWorld
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?

java javac

1
推荐指数
1
解决办法
3550
查看次数

为什么 Java 编译器不将这些调用内联到单个 if 子句中?

我被拉入了类似于以下代码的性能调查:

private void someMethod(String id) {
   boolean isHidden = someList.contains(id);
   boolean isDisabled = this.checkIfDisabled(id);

   if (isHidden && isDisabled) {
     // Do something here
   }
}
Run Code Online (Sandbox Code Playgroud)

当我开始调查它时,我希望编译后的版本看起来像这样:

private void someMethod(String id) {
   if (someList.contains(id) && this.checkIfDisabled(id)) {
     // Do something here
   }
}
Run Code Online (Sandbox Code Playgroud)

然而,令我惊讶的是,编译后的版本看起来和第一个版本一模一样,带有局部变量,这导致 in 中的方法isDisabled总是被调用,这就是性能问题所在。

我的解决方案是自己内联它,所以该方法现在在 处短路isHidden,但它让我想知道:为什么 Java 编译器在这种情况下不够聪明,无法为我内联这些调用?它真的需要局部变量吗?

谢谢 :)

java performance jvm bytecode javac

1
推荐指数
1
解决办法
80
查看次数

从 javac 或 JRE 获取没有编译类的 java 类版本

Java 类版本可以使用以下命令从类二进制文件中获取javap

javap -verbose Test | grep 'minor\|major'
  minor version: 0
  major version: 55
Run Code Online (Sandbox Code Playgroud)

是否可以提前知道 JDK 将生成哪个类版本? java -version不显示它

java -version
openjdk version "11.0.17" 2022-10-18
Run Code Online (Sandbox Code Playgroud)

通常与java.lang.UnsupportedClassVersionError相关。

java javac unsupported-class-version

1
推荐指数
1
解决办法
710
查看次数

又一个Java类路径问题

我一直在Netbeans的一个项目上工作.现在我想提交它并允许标记用脚本编译它.但是,当我尝试通过命令行运行时,我得到NoClassDefFoundError.即使手动将类路径设置为当前目录.

javac Main.java工作正常

然后调用java -classpath.主要给出:

java -classpath . Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: pro
ject2/Main)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Run Code Online (Sandbox Code Playgroud)

java javac noclassdeffounderror

0
推荐指数
1
解决办法
328
查看次数

javac无效标志

我试图在命令提示符下执行此命令以查找我的构建错误.我已经分解的是,javac将文件名中的一个视为标志(选项),这就是为什么它无法执行.我该如何解决?

C:\Users\AUG>javac -verbose -classpath "C:\Program Files\MATLAB\R2010b\toolbox\j
avabuilder\jar\javabuilder.jar" -d "C:\Users\AUG\Documents\SourceTraceJAVA\Sourc
eTrace\src\classes" "C:\Users\AUG\Documents\SourceTraceJAVA\epanet2.h" "C:\Users
\AUG\Documents\SourceTrace\src\SourceTrace\SourceTrace.java" "C:\Users\AUG\Docum
ents\SourceTraceJAVA\SourceTrace\src\SourceTrace\SourceTraceMCRFactory.java" "C:
\Users\AUG\Documents\SourceTraceJAVA\SourceTrace\src\SourceTrace\SourceTraceRemo
te.java" "C:\Users\AUG\Documents\SourceTraceJAVA\SourceTrace\src\SourceTrace\pac
kage-info.java"
javac: invalid flag: C:\Users\AUG\Documents\SourceTraceJAVA\epanet2.h
Usage: javac <options> <source files>
use -help for a list of possible options
Run Code Online (Sandbox Code Playgroud)

它正在考虑将epanet2.h文件作为标志而不是文件.语法有什么问题吗?我该如何解决这个问题?

java build javac matlab-deployment

0
推荐指数
1
解决办法
1万
查看次数

使用jar库包编译和执行java程序

我正在尝试编译并执行一个使用JTidy的java程序.我已经设法使用以下命令编译程序:

javac -classpath jtidy-r938.jar @sourcefile
Run Code Online (Sandbox Code Playgroud)

这似乎工作得很好.但是,当我尝试使用以下命令运行程序时(Top是包含程序主要部分的类的名称):

java -classpath jtidy-r938.jar Top
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Top
Caused by: java.lang.ClassNotFoundException: Top
...
Could not find the main class: Top. Program will exit.
Run Code Online (Sandbox Code Playgroud)

对于一个简单的解决方案来说,这很可能是一个非常愚蠢的问题,但这让我感到疯狂.请帮忙!!

java javac

0
推荐指数
1
解决办法
1362
查看次数

java编译器创建了多少个文件?

如果我编译一个类

class hussi
{
  public static void main(String args[])
  {
    System.out.println("hello java");
  }
}
Run Code Online (Sandbox Code Playgroud)

我有除hussi.class文件以外的任何文件吗?
javac是否创建除.class文件以外的任何文件?

java javac

0
推荐指数
1
解决办法
4270
查看次数

命令适用于交互式shell,但不适用于shell脚本

我编写了一个脚本,它将为javac生成适当的参数来编译我的项目,以便更好地掌握shell脚本.

这很奇怪..脚本运行完美,但是如果脚本运行带有这些参数的javac它不起作用,并且如果我在交互式shell中运行完全相同的命令它.一切都以绝对路径输出,所以我在这里几乎不知所措.

示例目录结构:

src/File.java
src/File.png
src/dir/File2.java
jars/Library.jar
Run Code Online (Sandbox Code Playgroud)

预期产量:

build/File.class
build/File.png
build/dir/File2.class
Run Code Online (Sandbox Code Playgroud)

shell脚本:

#! /bin/sh

cwd=$(pwd)

if [ -d "build" ]; then
    rm -rf $cwd/build/*
else
    mkdir $cwd/build
fi

find $cwd/src \( ! -path '*/.*' \) -type f ! -iname "*.java" | xargs -I{} cp --parents {} $cwd/build

cmd=$(echo javac -sourcepath $cwd/src -classpath $(find $cwd/jars -type f | awk '{ printf("\"%s\";", $0);}'  | awk '{ print substr($0, 0, length($0)); }') -d $cwd/build $(find $cwd/src \( ! -path '*/.*' \) …
Run Code Online (Sandbox Code Playgroud)

bash shell debian javac

0
推荐指数
1
解决办法
2671
查看次数

javac是否预先计算了固定表达式?

是否为此类变量声明提供了优化:

final int secondsInDay = 24 * 60 * 60;
Run Code Online (Sandbox Code Playgroud)

尽管additional_funct根本没有使用,但C++上的这段代码甚至都无法编译:

#include <iostream>

void additional_funct(int num);


void main()
{
    std::cout << "just a text";
}


void additional_funct(int num)
{
    // For both lines will be shown "divide by zero"
    int var = 5 / 0;
    int another_var = num + (2 / 0);
}
Run Code Online (Sandbox Code Playgroud)

这证明了C++编译器在运行之前对数字文字表达式进行了优化,以预先计算它们.虽然相同的Java代码将开始运行:

package experimental_main;

public class Experimental_start {
    public static void main(String[] args) {
        // Will throw ArithmeticException "by zero"
        additionalMethod(2);
        System.out.println("just a text");
    } …
Run Code Online (Sandbox Code Playgroud)

java javac

0
推荐指数
1
解决办法
83
查看次数

如何在Android项目上设置自定义Java编译器参数?

我将以下内容放在项目gradle文件的末尾:

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs += 
            ['-Xep:MissingOverride:ERROR', 
             '-Xep:MissingCasesInEnumSwitch:ERROR',]
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的代码中,如果我在@Override某处删除了注释或删除了switch语句,我的Android项目仍会生成。它不应该因错误而失败吗?

java android javac gradle android-gradle-plugin

0
推荐指数
1
解决办法
1562
查看次数