运行jar文件时Java找不到主类[重复]

Posted

技术标签:

【中文标题】运行jar文件时Java找不到主类[重复]【英文标题】:Java can't find main class when i run jar file [duplicate] 【发布时间】:2016-05-21 23:56:13 【问题描述】:

我尝试将jnativehook 添加到我的项目中,但是当我从控制台启动 jar 文件时,它显示:

错误:无法找到或加载主类 com.company.Main

我在 IntelliJ IDEA 工作,只是创建了新的控制台应用程序并将 jar 添加到依赖项。我尝试构建 helloworld 并从控制台运行它,它运行良好,但是当我将程序更改为使用 jnativehook 时,java 开始给我一个错误。顺便说一句,程序在 IntelliJ IDEA 控制台中运行良好,运行良好。

我用这个命令启动 jar:

java -jar consolerunner.jar

我的 .classpath 看起来没问题,无论如何,这里是:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="src" path="src"/>
    <classpathentry exported="true" kind="var" path="USER_HOME/Desktop/jnativehook-2.0.3.jar"/>
    <classpathentry kind="output" path="out/production/ConsoleRunner"/>
</classpath>

主要的,只有一类项目(主要是键盘记录器示例): 包 com.company;

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main implements NativeKeyListener 
    public void nativeKeyPressed(NativeKeyEvent e) 
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) 
            try 
                GlobalScreen.unregisterNativeHook();
             catch (NativeHookException e1) 
                e1.printStackTrace();
            
        
    

    public void nativeKeyReleased(NativeKeyEvent e) 
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    

    public void nativeKeyTyped(NativeKeyEvent e) 
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    

    public static void main(String[] args) 
        try 
            GlobalScreen.registerNativeHook();
        
        catch (NativeHookException ex) 
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());

            System.exit(1);
        

        GlobalScreen.addNativeKeyListener(new com.company.Main());
        Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
        logger.setLevel(Level.OFF);
    

如何构建 jar(或者我只是错误地启动它)以在控制台中工作?

我尝试在 ant 中构建它,但没有任何进展。 也许,我错误地导入了 jnahook jar,但此时我太迷茫了,我真的不知道该怎么办。 我阅读了很多 *** 问题,但找不到任何类似或有用的内容。

统一更新: 这是我的清单:

Manifest-Version: 1.0
Main-Class: com.company.Main

我知道,IntelliJ 会忽略 .classpath,但它可以使用 .classpath,如果您在项目设置中设置它。 而且,是的,我构建了 jar,但它不起作用。

【问题讨论】:

一个.classpath是eclipse使用的东西,IDEA会忽略这个文件 【参考方案1】:

您必须提供一个 MANIFEST.MF 文件。 这个文件的内容应该是:

Main-Class: my.package.Main

将此文件放入:

resources/META-INF/MANIFEST.MF

【讨论】:

你也可以在你的控制台中提供主类 java -jar consolerunner.jar my.package.MainClass 所以,我认为我的清单没问题,它是:Manifest-Version: 1.0 Main-Class: com.company.Main

以上是关于运行jar文件时Java找不到主类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java运行时找不到主类

java运行显示“找不到或无法加载主类”怎么回事?

idea打包jar,运行错误: 找不到或无法加载主类

java运行显示“找不到或无法加载主类”!

java找不到或无法加载主类

eclipse打成jar包后找不到类,是怎么回事呢,主类文件打包时已经选了,虚拟机也装了,还是运行不了