簡體   English   中英

javac 錯誤:僅當顯式請求注釋處理時才接受類名

[英]javac error: Class names are only accepted if annotation processing is explicitly requested

編譯java程序時出現此錯誤:

error: Class names, 'EnumDevices', are only accepted if annotation 
processing is explicitly requested
1 error

這是 java 代碼(我在 Ubuntu 上運行它)。

import jcuda.CUDA;    
import jcuda.driver.CUdevprop;    
import jcuda.driver.types.CUdevice;

public class EnumDevices {

  public static void main(String args[]) {
     CUDA cuda = new CUDA(true);    
        int count = cuda.getDeviceCount();

        System.out.println("Total number of devices: " + count);

        for (int i = 0; i < count; i++) {

          CUdevice dev = cuda.getDevice(i);
          String name = cuda.getDeviceName(dev);
          System.out.println("Name: " + name);
          int version[] = cuda.getDeviceComputeCapability(dev);

          System.out.println("Version: " + 
              String.format("%d.%d", version[0], version[1]));
          CUdevprop prop = cuda.getDeviceProperties(dev);
          System.out.println("Clock rate: " + prop.clockRate + " MHz");
          System.out.println("Threads per block: " + prop.maxThreadsPerBlock);
        }
    }
}

這是 javac 命令:

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices

我如何編譯這個程序?

您至少需要在這一行的文件名中添加.java擴展名:

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices

來自官方常見問題解答

類名稱“HelloWorldApp”僅在明確請求注釋處理時才被接受

如果您收到此錯誤,則您在編譯程序時忘記包含 .java 后綴。 請記住,命令是 javac HelloWorldApp.java 而不是 javac HelloWorldApp。

此外,在您的第二個 javac 示例中(您實際上包含了.java ),您需要包含編譯所需的所有必需的 .jar 文件。

我也被這個難住了,因為我包含了 .Java 擴展名……然后我注意到了大寫的 J。

這也會導致“注釋處理”錯誤:

javac myclass.Java 

相反,它應該是:

javac myclass.java 

使用javac ClassName.java編譯程序,然后使用java ClassName執行編譯后的代碼。 您不能只將 javac 與 ClassName 混合使用(沒有 java 擴展名)。

錯誤“只有在顯式請求注釋處理時才接受類名稱”可能由以下一種或多種原因引起:

  1. 編譯時不要為您的 java 文件使用 .java 擴展名。
  2. 編譯時.java 擴展名(即.Java)的大小寫不正確。
  3. 編譯時 .java 擴展名中的任何其他錯字。
  4. 同時編譯和運行時,忘記用'&&'連接兩個命令(即javac Hangman.java java Hangman)。 我花了大約 30 分鍾才弄清楚這一點,通過分別運行編譯和運行程序,我注意到了這一點,這當然工作得很好。

這可能不是導致此錯誤的完整原因列表,但這些是我目前所知道的原因。

我了解到您也可以通過將源文件存儲在名為 Java 的文件夾中來獲得此錯誤

chandan@cmaster:~/More$ javac New.java
chandan@cmaster:~/More$ javac New
error: Class names, 'New', are only accepted if annotation processing is explicitly requested
1 error

因此,如果您在再次編譯后錯誤地使用javac來運行程序。

編譯Java程序時出現此錯誤:

error: Class names, 'EnumDevices', are only accepted if annotation 
processing is explicitly requested
1 error

這是Java代碼(我正在Ubuntu上運行它)。

import jcuda.CUDA;    
import jcuda.driver.CUdevprop;    
import jcuda.driver.types.CUdevice;

public class EnumDevices {

  public static void main(String args[]) {
     CUDA cuda = new CUDA(true);    
        int count = cuda.getDeviceCount();

        System.out.println("Total number of devices: " + count);

        for (int i = 0; i < count; i++) {

          CUdevice dev = cuda.getDevice(i);
          String name = cuda.getDeviceName(dev);
          System.out.println("Name: " + name);
          int version[] = cuda.getDeviceComputeCapability(dev);

          System.out.println("Version: " + 
              String.format("%d.%d", version[0], version[1]));
          CUdevprop prop = cuda.getDeviceProperties(dev);
          System.out.println("Clock rate: " + prop.clockRate + " MHz");
          System.out.println("Threads per block: " + prop.maxThreadsPerBlock);
        }
    }
}

這是javac命令:

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices

如何編譯該程序?

如何在 Ubuntu 終端上重現這個神秘的錯誤:

把它放在一個名為 Main.java 的文件中:

public Main{
    public static void main(String[] args){
        System.out.println("ok");
    }
}

然后像這樣編譯它:

user@defiant /home/user $ javac Main
error: Class names, 'Main', are only accepted if 
annotation processing is explicitly requested
1 error

這是因為您沒有在Main的末尾指定.java

這樣做,它的工作原理:

user@defiant /home/user $ javac Main.java
user@defiant /home/user $

現在拍拍你的額頭,抱怨錯誤信息太神秘了。

也許您可能正在使用文件名而不是方法名進行編譯....檢查一次我也犯了同樣的錯誤,但我很快糾正了.....#happy Coding

首先從https://www.oracle.com/technetwork/java/javase/downloads/index.html下載 jdk。 然后在搜索中寫入編輯系統環境變量在打開的窗口中我推底部稱為環境變量然后在系統變量中輸入圖像描述在這里推底部新在字段新變量中寫入“路徑”在字段中寫入新值在 jdk 中的文件夾 bin 中寫入目錄,如“ C:\\ Program Files文件\\的Java \\ jdk1.8.0_191 \\ BIN”,但在我的OS的工作只有這個“C:\\ Program Files文件\\的Java \\ jdk1.8.0_191 \\ BIN \\的javac.exe”進入的形象在這里說明按OK 3倍

啟動命令。 我推底部窗口 + R。然后寫 cmd。 在 cmd 中寫“cd(你的代碼目錄)”看起來像 C:\\Users\\user\\IdeaProjects\\app\\src。 然后編寫“javac(您的程序的主類的名稱)”。java 看起來像 blabla.java 和 javac 在您的目錄中創建字節碼(您的主類的名稱)。 最后在cmd中寫入“java(您的主類的名稱)”,我的程序開始工作

錯誤:僅當顯式請求注釋處理時才接受類名

為避免此錯誤,您應該使用帶有 .java 擴展名的 javac 命令。

Javac DescendingOrder.java <- 這工作完美。

如果在同一行中編譯多個文件,請確保只使用 javac 一次,而不是對每個類文件使用。

不正確: 在此處輸入圖片說明

正確的: 在此處輸入圖片說明

我從 Maven 項目創建了一個 jar 文件(通過編寫mvn packagemvn install

之后我打開 cmd ,移動到 jar 方向,然后

運行此代碼

java -cp FILENAME.jar package.Java-Main-File-Name-Class

編輯:在放入 Pom 文件后聲明主要運行代碼:

java -jar FILENAME.JAR

如果將您的文件保存為示例:hello.java和

類Example.cmd中執行此操作

javac hello.java

Java示例

這樣可行。

您查看路徑javac.exe和java.exe

D:\\ Test>“ C:\\ jdk1.7.0_80 \\ bin \\ javac.exe” TestMain.java D:\\ Test>“ C:\\ jdk1.7.0_80 \\ bin \\ java.exe” TestMain.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM