java - 需要从控制台运行 .jar 才能工作

标签 java linux multicast iotivity

我有一个 Java 应用程序。 我正在使用 eclipse 编写、编译和创建可运行的 .jar。

该程序用于发现 OCF 设备。

它使用 UDP 和多播。

组播代码

public static void sendMulticast(byte[] data) throws Exception{
        DatagramPacket pack = new DatagramPacket(data, data.length, mgroup, mport);
        msocket.send(pack);
    }
public static byte[] recieveMulticast(int timeout) throws Exception{
        DatagramPacket packet;
        byte[] data = new byte[AppConfig.ocf_buffer_size];

        packet = new DatagramPacket(data, data.length);
        msocket.setSoTimeout(timeout);
        msocket.receive(packet);

        return data;
    }

当我从 eclipse 启动代码时,代码可以工作。当我在 Linux 上从控制台运行 .jar 时,它也有效。

但是当我双击启动它时,它不起作用。

从控制台启动时,它会在不到一秒的时间内找到我的测试设备。当双击开始时,它永远找不到。

我还没有在 Windows 上测试过它,但问题仍然存在于 Linux 上。

从控制台启动 .jar 或通过双击启动 .jar 有什么区别? 为什么它会影响多播消息?

我正在使用“将所需的库打包到生成的 JAR 中”。 我在 eclipse 中使用 java 1.7,在 Linux 中使用 1.8,也许这就是问题所在?但是为什么从控制台运行它可以工作? 如果我使用 sudo 我会理解,但我没有。

最佳答案

当您从控制台运行任何 jar 时,控制台/终端知道哪个程序负责运行任何 jar 即

java -jar example.jar 

但是当双击环境时,OS/GUI 管理器不知道默认负责程序来运行 jar。 (同样,当您尝试打开一些未知的扩展文件时,操作系统会询问您打开哪个程序/应用程序)

要使 Java 默认打开 .jar 文件(即双击),请右键单击任何 .jar 文件以选择“属性”。在以下窗口中选择“打开方式”选项卡以查看例如以下选择:

enter image description here

关于java - 需要从控制台运行 .jar 才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44364975/

相关文章:

linux - 使用 grep 在同一文本行中搜索多个模式[由换行符分隔]

c - 如何以编程方式获取用于加入多播组的接口(interface)?

docker - 到 Kubernetes 的多播流量

java - 如何在类和方法之间传递 Graphics 对象来绘制线条

java - 过滤字符串中不断变化的数字的最简单方法是什么?

java - 从 JPanel 中删除多个 JComboBox

linux - 在 linux 中显示 perl 脚本的输出

java - 在 Linux OpenSuse cron 上,脚本运行,但只生成空日志

java - JVM启动后是否可以启动java jdwp(又名: at runtime) without command line parameters?

linux - 在 Linux 上接收所有多播 ICMPv6 数据包