小编sam*_*sam的帖子

绘制矢量时钟时间轴

我有一个问题是要求绘制一个矢量时钟时间线图来说明在事件关系之前发生的部分顺序.

这是矢量时钟:

V(a) = (4,4,2)
V(b) = (4,2,2)
V(c) = (2,2,3)
V(d) = (4,3,2)
V(e) = (4,4,4)
V(f) = (3,2,2)
Run Code Online (Sandbox Code Playgroud)

我不确定如何确定每个事件属于哪个进程.我使用的所有示例都使用矢量时钟,其值从0开始,例如V(a)=(1,0,0),因此我假设事件a是第一个发生的事件或者它与其他进程并发但我不知道该怎么做这个特别的问题.

有人可以帮忙吗?

谢谢

synchronization clock distributed-computing distributed-system

2
推荐指数
1
解决办法
755
查看次数

循环不遍历整个arraylist

我有一个问题,我试图迭代存储餐馆对象的arraylist但循环只通过五个元素中的3个.

我创建了一个测试方法来说明:

public void testLoop() {
        ArrayList<Eatery> test = new ArrayList<Eatery>();
        test = eateriesListDefault;
        for(Eatery e : test) {
            MyLog.e(TAG, "Name: " + e.getName());
        }
        for (int i = 0; i < eateriesListDefault.size(); i++) {
            MyLog.e(TAG, "Name " + test.get(i).getName());
            test.remove(i);
        }
        for(Eatery e : test) {
            MyLog.e(TAG, "Name " + e.getName());
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里测试将有5个餐馆对象.第一个循环成功打印5个名称中的5个.第二个循环只删除了3个餐馆,因此最后一个循环打印出两个名字.

我试过用

for(Eatery e : eateriesListDefault) {
            MyLog.e(TAG, "Name: " + e.getName());
            test.remove(e);
}
Run Code Online (Sandbox Code Playgroud)

代替第二个循环,但是我得到并发访问错误.

有谁知道我做错了什么?

java android

1
推荐指数
1
解决办法
1097
查看次数

JPanel 左侧的 JTextArea

我有一个主要的 gui 类和一个 gui 日志类。gui 日志类扩展了 JPanel 并简单地添加了一个 JTextField,它将用于打印日志语句。我将 JTextfield(在滚动窗格中)添加到面板中

add(scrollPane, BorderLayout.WEST);
Run Code Online (Sandbox Code Playgroud)

然后将此类添加到我的主 gui 类中,该类扩展了 JFrame 并使用了 BorderLayout。面板首先添加到 JSplitPane(使用垂直拆分),然后使用添加 SplitPane

getContentPane().add(splitPane);
Run Code Online (Sandbox Code Playgroud)

我的问题是我希望日志面板中的 JTextfield 位于屏幕的最左侧,但是无论我使用什么 BorderLayout 设置(CENTER、EAST、SOUTH...),它始终保持在中心。

有谁知道我该如何解决这个问题?

您还知道如何在调整拆分窗格的大小时调整 JTExt 区域的大小吗?

谢谢

图片: 在此处输入图片说明

左边是我得到的,右边是我想要的。

java swing jscrollpane jtextarea border-layout

1
推荐指数
1
解决办法
824
查看次数

if语句不在while(true)循环中执行

当按下gui上的按钮时,我试图让我的程序突然出现.

我有一个启动GUI线程的线程,等待直到按下一个应用按钮.这是代码:

public void run() {     

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }           
        });

        // Wait until apply button clicked and set team
        while(true) {

            applyClicked = gui.getApplyClicked();
            if (applyClicked == true) {
                teamYellow = gui.getTeam();
                break;
            }   
        }
Run Code Online (Sandbox Code Playgroud)

但是,即使我单击apply并且GUI中的applyClicked变为true,它也不会执行if语句.

但是,如果我在while下面添加一条打印线,它可以正常工作.

我还调试它逐行运行并且变量设置正确并且它可以工作.

当我没有println时,为什么这不起作用?这与线程有关吗?

谢谢

java swing loops

1
推荐指数
1
解决办法
1030
查看次数

通过udp发送的图像已损坏

我试图在java中实现一个udp图像传输程序.发送器将图像分成1024字节的数据包,其中前2个字节是携带序列号的短,第3个字节是指示数据包是否是最后一个的标志.

当我执行接收器并使用发送器发送图像时,传输的图像不完整并且上面有奇怪的颜色.其他时候,当我执行接收器时,它会在发送数百个数据包后粘住.

这是接收器的代码,它接收接收到的数据包并将其写入字节流.

        double DATAGRAM_MAX_SIZE = 1024;
        byte[] recieveData = new byte[(int) DATAGRAM_MAX_SIZE];
        ByteArrayInputStream bais = new ByteArrayInputStream(recieveData);
        DataInputStream dis = new DataInputStream(bais);

        // Loop until all packets received
        byte isLast = 0;
        while(true) {
            receievePacket = new DatagramPacket(recieveData, recieveData.length);
            try {
                receieveSocket.receive(receievePacket);
            } catch (IOException e) {
                System.out.println("Error receieving packet");
                e.printStackTrace();
            }
            Short sequenceNum = dis.readShort();
            isLast = dis.readByte();
            System.out.println(recieveData[0] + " " + recieveData[1] +" " +  recieveData[2]);
            if (!seenSeq.contains(sequenceNum)) {
                seenSeq.add(sequenceNum);
                bos.write(recieveData, 3, (int) DATAGRAM_MAX_SIZE-3);
            }
            dis.reset(); …
Run Code Online (Sandbox Code Playgroud)

java udp

0
推荐指数
1
解决办法
1459
查看次数