问题摘要
我有一个结合了java和python的应用程序,这两种语言通过本地主机套接字进行通信。(我不能使用jython,不能为pygame抛出java,也不能为纯java抛出python。)
应用程序打开python和java之间的套接字,以及从java到中心服务器的套接字。从ui或服务器向java的输入传递到python,在python中处理程序逻辑。然后,python将消息发送回java,这些消息要么被传递到服务器,要么被解释为在客户机上使用(例如,python告诉java在屏幕上绘制一些东西)。
代码段
java:main客户端
PyConnect python = new PyConnect();
Thread th = new Thread(python);
th.start();
while(!python.isInitialized());
Client game = new Client();
PythonMessageDecoder.setGame(game);
th = new Thread(game);
th.start();
java:运行
System.out.println("Starting...");
// ...Initialize ServerSocket instance to Python...
try
{
// ...Accept connection from Python...
System.out.println("Connected!!!");
}
// ...catch...
try
{
// ...Get input/output streams...
System.out.println("Both Streams are up");
}
// ...catch...
initialized = true;
while(PythonMessageDecoder.getInstance() == null);
// ...Read from Python...
pythonmessagedecoder.java
public static void setGame(Game game) { PythonMessageDecoder.game = game; }
public static PythonMessageDecoder getInstance()
{
if(game == null) return null;
return InstanceHolder.INSTANCE;
}
// ...
问题详细信息
在我们所有的windows机器(xp、vista和w7;x86和x64)上,这个过程运行良好。在我们的ubuntu和osx机器上,没有
例外情况
(在python或java中)。但是没有出现java框架。在上面的示例中,我留下了跟踪调试,mac和linux框显示:
启动。。。
有联系的!!!
两条小溪都向上
此外,我们项目的其他java部分(不尝试与python结合)工作得非常好。python外壳运行良好。python代码运行得很好(如果python没有连接,
PyConnect
无法连接到'connected!!!行)。
解决方案尝试
起初,我认为问题可能是两个线程之间的死锁,因为它们都会在完成任务之前停下来等待一个条件。但是
PyConnect公司
设置其
initialized
等待前的状态,主线程正在检查
PyConnect公司
已经达到了
已初始化
国家。老实说,我不确定问题是什么。