3 回答

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;
}
});
}
}

TA貢獻1829條經驗 獲得超7個贊
“企業”方式是在Java EE服務器或至少在Spring框架中運行這些應用程序。這也可能是過大的殺傷力。
如果需要傳送一堆數據,則RMI將執行此操作。
如果您不怕自己的協議,數據結構和錯誤處理,可以設置服務器和客戶端套接字并通過它們進行通信。
我認為,通過公共目錄中的文件(設置您自己的協議誰寫或何時刪除文件)或通過共享數據庫進行通信的選擇具有一定的吸引力。技術含量低,不是非??欤欠浅:唵慰煽?。而且,從外部監視“通信”也相當容易。
添加回答
舉報