亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

兩個單獨的Java桌面應用程序之間的通信

兩個單獨的Java桌面應用程序之間的通信

翻閱古今 2019-11-27 10:45:03
我正在尋找開發兩個單獨的(但相關的)Java桌面應用程序。我希望一個應用程序能夠觸發另一個應用程序,傳遞可以進行編輯和傳回的數據,即通信將是兩種方式。如果另一個應用程序已經在運行,我希望他們之間進行交流,即我不想僅通過命令行傳遞參數,等等。一般來說,為了達到這個目的,我應該考慮哪些策略/技術?
查看完整描述

3 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

為了顯示讓兩個應用程序相互通信有多么容易,請使用JGroups來查看此網絡剪貼板演示。只需啟動兩個實例,然后開始將文件放入其中一個即可。第二個實例將立即顯示相同的文件。


import java.io.Serializable;

import java.awt.*;

import java.awt.datatransfer.*;

import javax.swing.*;

import org.jgroups.*;


public class JGroupsTest {


    public static void main(String[] args) throws Exception {

        final JFrame frame = new JFrame();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        frame.setSize(500, 300);

        final DefaultListModel listModel = new DefaultListModel();

        final JList panel = new JList(listModel);

        panel.setBackground(new Color(128, 0, 40));

        panel.setForeground(new Color(240, 240, 240));

        frame.add(panel);

        System.setProperty("java.net.preferIPv4Stack", "true");

        final JChannel channel = new JChannel("udp.xml");

        channel.connect("networkclipboard");

        channel.setReceiver(new ReceiverAdapter() {

            @Override

            public void viewAccepted(View newView) {

                frame.setTitle("Network Clipboard - " + channel.getLocalAddress());

            }


            @Override

            public void receive(Message msg) {

                listModel.addElement(msg.getObject());

            }

        });


        panel.setTransferHandler(new TransferHandler() {

            @Override

            public boolean importData(JComponent comp, Transferable t) {

                DataFlavor[] transferDataFlavors = t.getTransferDataFlavors();

                for (DataFlavor flavor : transferDataFlavors) {

                    try {

                        Object data = t.getTransferData(flavor);

                        if (data instanceof Serializable) {

                            Serializable serializable = (Serializable) data;

                            Message msg = new Message();

                            msg.setObject(serializable);

                            channel.send(msg);

                        }

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

                return super.importData(comp, t);

            }


            @Override

            public boolean canImport(TransferSupport support) {

                return true;

            }


            @Override

            public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {

                return true;

            }


        });

    }


}


查看完整回答
反對 回復 2019-11-27
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

  • “企業”方式是在Java EE服務器或至少在Spring框架中運行這些應用程序。這也可能是過大的殺傷力。

  • 如果需要傳送一堆數據,則RMI將執行此操作。

  • 如果您不怕自己的協議,數據結構和錯誤處理,可以設置服務器和客戶端套接字并通過它們進行通信。

  • 我認為,通過公共目錄中的文件(設置您自己的協議誰寫或何時刪除文件)或通過共享數據庫進行通信的選擇具有一定的吸引力。技術含量低,不是非??欤欠浅:唵慰煽?。而且,從外部監視“通信”也相當容易。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 703 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號