Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么NetBeans在OSX上运行我的程序,而不是将其构建到JAR中?_Java_Macos_Netbeans_Cross Platform - Fatal编程技术网

Java 为什么NetBeans在OSX上运行我的程序,而不是将其构建到JAR中?

Java 为什么NetBeans在OSX上运行我的程序,而不是将其构建到JAR中?,java,macos,netbeans,cross-platform,Java,Macos,Netbeans,Cross Platform,tl;dr 我缺少什么依赖关系,使NetBeans可以在内部正常运行OSX集成程序,但无法清理并将其构建到JAR中 我正在尝试制作一个集成到OSX中的Java程序,但我也希望将其发布到Windows和Linux上。为此,我使用了com.apple.eawt包的实用程序类 到目前为止,一切都很好。我已经把我的菜单栏集成到OSX中,我有偏好处理程序和关于处理程序以及所有有趣的东西,它工作得很好。。。当我只是在NetBeans中单击Run时。然而!当我点击Clean and Build时,会出现很多

tl;dr

我缺少什么依赖关系,使NetBeans可以在内部正常运行OSX集成程序,但无法清理并将其构建到JAR中


我正在尝试制作一个集成到OSX中的Java程序,但我也希望将其发布到Windows和Linux上。为此,我使用了
com.apple.eawt
包的实用程序类

到目前为止,一切都很好。我已经把我的菜单栏集成到OSX中,我有偏好处理程序和关于处理程序以及所有有趣的东西,它工作得很好。。。当我只是在NetBeans中单击Run时。然而!当我点击Clean and Build时,会出现很多错误,比如:

/my/source/path/MenuBarManager.java:3: error: package com.apple.eawt does not exist
import com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62: error: cannot find symbol
    private static class MyAboutHandler implements AboutHandler {
                                                   ^
  symbol:   class AboutHandler
  location: class MyMenuBarManager
/my/source/path/MyMenuBarManager.java:68: error: package AppEvent does not exist
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
                                          ^
/my/source/path/MyMenuBarManager.java:67: error: method does not override or implement a method from a supertype <br/>
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
        ^
/my/source/path/MenuBarManager.java:3:错误:package com.apple.eawt不存在
进口com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62:错误:找不到符号
私有静态类MyAboutHandler实现AboutHandler{
^
符号:关于坦德尔的班级
位置:MyMenuBarManager类
/my/source/path/MyMenuBarManager.java:68:错误:包AppEvent不存在
@覆盖公共无效handleAbout(AppEvent.AboutEvent ae){
^
/my/source/path/MyMenuBarManager.java:67:错误:方法不重写或实现超类型中的方法
@覆盖公共无效handleAbout(AppEvent.AboutEvent ae){ ^
为什么我可以在IDE中很好地运行它,但我不能告诉IDE将它编译成JAR?


试图修复
我试图通过创建一个全新的NetBeans项目,将所有源文件复制到该项目中,然后单击“清理并构建”来完全重新创建该项目。我得到了相同的结果,所以这不起作用。

NetBeans具有硬组织的运行函数。如果我没有弄错,该函数将在NetBeans进程(及其类路径)中编译并运行您的应用程序。 要解决“按“生成”命令编译的问题,应确保生成代理具有所有必要的依赖项:

  • 对于Maven,只需在pom.xml中添加依赖项
  • 对于ant,您应该指定类路径来添加必需的.jar

PS package com.apple.eawt是苹果唯一的软件包。如果您希望在其他平台上启动应用程序,您应该使用简单的AWT(而不是apple eawt)或其他通用UI框架(例如Swing)。

我当前的解决方法是清理并运行程序(而不是构建),然后将
.class
文件放入格式正确的
META\u INF
文件夹和
manifest.MF
文件的
.zip
文件夹中。然后我将
.zip
扩展名重命名为
.jar
,并使用这个被黑掉的jarfile!

,即使包
com.apple.eawt
在运行时也是如此e jar
rt.jar
(如果在OS X上),编译器将在名为
ct.sym
的符号文件中查找该包。该符号文件仅包含标准Java包,而不包含Apple扩展

一种解决方案是使用javac选项
-XDignore.symbol.file
,如下所示。但是-XD选项是非标准且未记录的,请参阅和


更好的解决方案可能是以不使用非标准Apple扩展的方式重写代码。

看起来库位于运行时类路径上,但不在编译类路径上,这很奇怪。你能提供编译脚本和用于编译或运行应用程序的命令吗?@Crazyjavahacking我没有。我只是使用NetBeans的内置你可以看到上面的两个按钮,如一个绿色的直角直角三角形和一个锤子前面的扫帚。如果你不同意这个问题,请留下一个评论,说明你为什么这么做。谢谢。改进的格式化和从TL中删除粗体样式和块引文;好问题+1博士。是ct吗?您是如何创建的?如果右键单击项目并选择属性,您会看到什么?我从哪里获得
pom.xml
?我从哪里获得必要的
.jar
?我如何知道NetBeans使用的是Maven还是ant?我的UI使用Swing,而OS X菜单栏集成使用
eawt
。我如何部署一个
jar
适用于所有操作系统,就像它一样?如果您使用Maven,在项目的根文件夹中可以找到pom.xml文件。如果您使用Ant,在项目的根文件夹中可以找到build.xml文件。(对于NetBeans,对于Ant,它包含2个文件-build.xml作为自动生成的脚本和其他一些文件,不要记住它的名称,以及包含用户定义内容的xml)。请参阅构建工具的实际示例,以在构建过程中添加依赖项。我找到了
build.xml
,所以我必须使用ant。我在哪里可以找到您提到的未命名的
.jar
呢?显然它在某个地方,因为它可以在IDE中运行……现在您应该找到应该添加的依赖项,并将其添加到build.xml中的类路径中(请参阅ant的文档)。或者您可以在ant构建中添加Apache Ivy,并配置希望添加到构建过程中的依赖项。这是我不知道的。这就是我问这个问题的原因。我缺少什么依赖项,它不会构建,但会运行?