当我运行jar文件时,Java无法找到主类

时间:2016-02-11 09:31:45

标签: java intellij-idea executable-jar

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

  

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

我在IntelliJ IDEA中工作,只是创建了新的控制台应用程序并将jar添加到依赖项中。我尝试构建helloworld并从控制台运行它,它工作得很完美,但是当我更改programm以使用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>

Main,只有一类项目(主要是它的Keylogger示例): package 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,但此时我太迷失了,我真的不知道该怎么做。 我阅读了很多stackoverflow问题,但找不到任何相似或有用的东西。

UPD: 这是我的清单:

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

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

1 个答案:

答案 0 :(得分:0)

您必须提供MANIFEST.MF文件。 该文件的内容应为:

Main-Class: my.package.Main

将此文件放在:

resources/META-INF/MANIFEST.MF