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将执行此操作。
如果您不怕自己的协议,数据结构和错误处理,可以设置服务器和客户端套接字并通过它们进行通信。
我认为,通过公共目录中的文件(设置您自己的协议谁写或何时删除文件)或通过共享数据库进行通信的选择具有一定的吸引力。技术含量低,不是非常快,但是非常简单可靠。而且,从外部监视“通信”也相当容易。
添加回答
举报