我有一个 Java 应用程序需要在 Windows 和 MacOS 上工作,它是使用 JDK8 在 Netbeans 8.2 中开发的。
此应用程序需要打开 WebSocket,但我在 MacOS 中遇到“不允许操作”异常,在 Windows 中它工作正常。
我已经使用“org.java_websocket.server.WebSocketServer”类实现了 WebSocket 服务器。
堆栈跟踪如下所示:
Operation not permitted
java.net.SocketException: Operation not permitted
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
at org.java_websocket.server.WebSocketServer.run(WebSocketServer.java:325)
at java.lang.Thread.run(Thread.java:748)
我一直在阅读可能的解决方案,但很少。一种可能的解决方案,取自 XCode 帖子,可能是向应用程序添加授权文件以获得访问网络的权利,但我不知道如何在 Netbeans 的 Java 项目中做到这一点,我没有找到关于它的任何文件。
编辑1
我认为问题在于该应用程序是使用 Process.Run 方法从另一个应用程序启动的。如果我直接启动它,它会正确打开 websocket。
也许您可以尝试从启动 Java 进程的应用程序启用传入连接和传出连接。 在 XCode 项目中,您必须转到项目设置 > 签名和功能 > 应用沙箱并启用网络检查。
希望有帮助。