我一直对 Netbeans 安装脚本生成的 Netbeans 桌面文件感到困惑。有问题的文件位于 /usr/share/applications 文件夹中,非常简单:
[Desktop Entry]
Encoding=UTF-8
Name=NetBeans IDE 8.0
Comment=The Smarter Way to Code
Exec=/bin/sh "/usr/local/netbeans-8.0/bin/netbeans"
Icon=/usr/local/netbeans-8.0/nb/netbeans.png
Categories=Application;Development;Java;IDE
Version=1.0
Type=Application
Terminal=0
如果我使用 从一个终端运行 Netbeans 应用程序,它本身可以完美运行/usr/local/netbeans-8.0/bin/netbeans
。我是不是漏掉了什么?如果我通过双击或从启动器运行它,我不知道如何获取错误输出。终端运行时没有错误。有什么想法吗?
编辑:Netbeans 文件是可执行的。
答案1
尝试不用 /bin/sh
Exec=/usr/local/netbeans-8.0/bin/netbeans
答案2
我通过查看系统日志找到了问题所在。我可能一开始就应该这么做,但我还是个 Linux 菜鸟。如果我浪费了大家的时间,我很抱歉!
显然,Netbeans 无法获取工具代理。具体来说,就是检测工具 Jayatanaag.jar。出于某种原因,这在直接从终端启动时不会导致失败状态,但仅在从 .desktop 文件运行时才会导致失败。为了修复此错误,我卸载并重新安装了 jayatana:
sudo apt-get purge jayatana
sudo apt-get install jayatana
这立即解决了该问题。
答案3
首先解释一下,谢谢@kos
通过使用Exec=
如下的行
Exec=/usr/local/netbeans-8.0/bin/netbeans
netbeans
已在 中执行sh
,因为Exec=
桌面文件中的行是作为 中的命令执行的sh
,而不是在bash
或其他中。因此
Exec=/bin/sh -c "/usr/local/netbeans-8.0/bin/netbeans"
生成过多的 sh 实例。只是
Exec=/usr/local/netbeans-8.0/bin/netbeans
将会netbeans
运行sh
如果由于某些原因您确实需要sh
,那么您的Exec=
财产就是错误的。
以下是 Eclipse(另一个基于 Java 的 IDE)的示例
% sh "/opt/eclipse/eclipse"
/opt/eclipse/eclipse: 1: /opt/eclipse/eclipse: Syntax error: "(" unexpected
要启动命令,sh
您需要使用-c
开关:
Exec=/bin/sh -c "/usr/local/netbeans-8.0/bin/netbeans"
-c string
If the -c option is present, then commands are read fromstring.
If there are arguments after the string, they are assigned to the positional
parameters, starting with $0.
答案4
右键单击桌面,创建一个启动器,然后添加:“/usr/share/applications/netbeans-8.2.desktop”作为命令,并为其指定一个有意义的标题。第一次运行时,您会收到不受信任的应用程序警告;选择标记为可执行文件。
祝您编码愉快。