代码之家  ›  专栏  ›  技术社区  ›  Brian S

Java<->Python本地主机流,Java不继续

  •  1
  • Brian S  · 技术社区  · 14 年前

    问题摘要

    我有一个结合了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公司 已经达到了 已初始化 国家。老实说,我不确定问题是什么。

    0 回复  |  直到 14 年前