使用UTF8编码编译后尝试执行java文件时出现问题

问题描述 投票:0回答:1

我目前正在尝试在终端中运行我在 eclipse 中创建的相应包内的 java 文件(因此它不是默认包)。然而,当我尝试使用以下命令编译我的文件后,问题就开始了:

javac Übung13.java

这只是产生了以下输出:

▄bung13.java:2: error: illegal character: '\u00bc'
package ├╝bung1;

很快,我发现原因是 ||字符,相当于布尔代数中的“或”运算符。然后我尝试了:

javac -encoding UTF8 Übung13.java 

没有输出,因此我认为它编译没有任何问题,并且包内还有一个 Übung13.class 文件,这也强调了我是对的。但是当我尝试执行我的 java 文件时,它会打印以下输出:

java Übung13
Fehler: Hauptklasse Übung13 konnte nicht gefunden oder geladen werden
Ursache: java.lang.NoClassDefFoundError: übung1/Übung13 (wrong name: Übung13)

这意味着我的包不包含类,但这不可能是真的,因为我成功编译了文件。这就是我也找不到任何解决方案的点。非常感谢您的帮助。

这是我的java文件的源代码,以防万一有任何错误,但该文件在eclipese IDE中运行没有任何错误,所以我对此非常怀疑。

// -*- coding: utf-8 -*-
package übung1;

public class Übung13 {
    
    

    public static void main(String[] args) {
        if (args.length > 0) {
            System.out.println("Das erste Kommandozeilenargument ist: " + args[0]);
        } else {
            System.out.println("Keine Kommandozeilenargumente vorhanden.");
        }
        /*
         * args ist eine variable welche für das Terminal steht bzw. man kann sie als array betrachten 
         * welcher als index die zeilen angibt.  
         */
        System.out.println(args.length);
        //Beispiel für eine Interaktion mit dem Terminal um die Summe zweier zahlen zu errechnen
        try {
         if (args.length == 0 || args.length == 1) {
             
         }
        } catch (NumberFormatException e) {
            System.out.print("Falsche Eingabe");
        };
        
         
    }
    

}

还有我的java文件路径:

eclipse-workspace\Übungen\src\übung1

1.

javac Übung13.java
javac -encoding UTF8 Übung13.java 
java übung1.Übung13
java Übung13.java
java terminal compilation javac execute
1个回答
0
投票

首先,我要指出一些有趣的事情:Java SE 没有 String 类。

Java有一个名为java.lang.String的类。当您编译代码时,编译器会自动插入

import java.lang.*;
,这意味着无论代码中出现 String 一词,它都会被视为
java.lang.String
的简写。

为什么这很重要?因为你的程序没有名为Übung13的类。您的程序确实有一个名为

übung1.Übung13
的类。

因此,首先要注意的是,仅使用“Übung13”本身是“永远”不正确的。运行程序的唯一正确方法是问题中的#3:java übung1.Übung13

为什么不起作用?因为您的

当前目录

不包含übung1包中的Übung13类 运行程序之前,切换到父目录:

cd ..

然后 
java übung1.Übung13

应该可以工作。

一般规则是,如果命令 

dir übung1\Übung13.class

显示文件,则可以运行上面的 java 命令。如果该 dir 命令没有列出任何文件,则说明您位于错误的当前目录中,Java 将无法识别您的类。

原因是 Java 类路径(Java 搜索类的目录和 .jar 文件的序列)始终是当前目录,除非您使用 

-cp

--class-path
选项显式指定类路径。如果当前目录包含 Übung13.java,则当前目录不包含 übung1.Übung13 类。
    

© www.soinside.com 2019 - 2024. All rights reserved.