小编Str*_*ies的帖子

何时使用volatile和synchronized

我知道有很多问题,但我仍然不太明白.我知道这两个关键字的作用,但我无法确定在某些情况下使用哪个.以下是一些我正在尝试确定最适合使用的示例.

例1:

import java.net.ServerSocket;

public class Something extends Thread {

    private ServerSocket serverSocket;

    public void run() {
        while (true) {
            if (serverSocket.isClosed()) {
                ...
            } else { //Should this block use synchronized (serverSocket)?
                //Do stuff with serverSocket
            }
        }
    }

    public ServerSocket getServerSocket() {
        return serverSocket;
    }

}

public class SomethingElse {

    Something something = new Something();

    public void doSomething() {
        something.getServerSocket().close();
    }

}
Run Code Online (Sandbox Code Playgroud)

例2:

public class Server {

    private int port;//Should it be volatile or the threads accessing it …
Run Code Online (Sandbox Code Playgroud)

java multithreading

31
推荐指数
4
解决办法
2万
查看次数

Java - 返回或if-else

可能重复:
函数是否只有一个return语句?

这就是我所说的.

if (condition) {
    aVariable = 1;
    return;
}
doSomething();

if (condition) {
    aVariable = 1;
} else {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这些中的一个优先于其他(惯例等)吗?

java coding-style

14
推荐指数
2
解决办法
9550
查看次数

Java - 声明数组

当我创建一个新数组时,我会做这样的事情.

int[] anArray = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

但我看到有些人做了类似的事情.

int[] anArray = new int[] {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

我明白它的作用,但我不明白它的目的.这样做有什么好处呢?

谢谢

java arrays

8
推荐指数
4
解决办法
1719
查看次数

通用阵列创建

这是我正在使用的代码

public class aClass<T> {

    private T[] elements;

    public aClass(T[] elements) {
        this.elements = elements;
    }

    public void doSomething() {
        T[] newArray = (T[]) new Object[5];
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

我见过有人说创建像这样的数组是一个坏主意,因为它不是类型安全的.但是,每次我使用它,我都没有问题.何时创建这样的数组会导致问题?

谢谢

java arrays generics

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

Java - 显示最小化的JFrame窗口

如果JFrame窗口最小化,有没有办法让它重新聚焦?

我试图让它点击某一点,然后恢复它.

            while (isRunning) {
                start = System.currentTimeMillis();
                frame.setState(Frame.ICONIFIED);
                robot.mouseMove(clickX, clickY);
                robot.mousePress(InputEvent.BUTTON1_MASK);
                frame.setState(Frame.NORMAL);
                Thread.sleep(clickMs - (System.currentTimeMillis() - start));
            }
Run Code Online (Sandbox Code Playgroud)

java swing focus jframe

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

JList.getModel()ClassCastException

当我打电话给JList<String>.getModel()它时,DefaultListModel<String>它给了我这个例外.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel
Run Code Online (Sandbox Code Playgroud)

抛出它的代码:

private JList<String> list = new JList<String>();
((DefaultListModel<String>) list.getModel()).addElement(...);
Run Code Online (Sandbox Code Playgroud)

但它并不是每次都这样做.大部分时间它完美地运行,但有时它会抛出这个异常.我不明白为什么会这样.有什么办法可以阻止这种情况发生吗?

java swing jlist

6
推荐指数
3
解决办法
1万
查看次数

AWT事件派遣线程中的SwingUtilities.invokeLater

SwingUtilities.invokeLater(Runnable)如果你正在修改GUI并且你在AWT事件调度线程中,你应该使用ActionListener吗?

java swing thread-safety

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

计算下载速度

我正在下载文件,但还尝试以KBps确定下载速度.我提出了一个等式,但它给出了奇怪的结果.

    try (BufferedInputStream in = new BufferedInputStream(url.openStream());
        FileOutputStream out = new FileOutputStream(file)) {
        byte[] buffer = new byte[4096];
        int read = 0;
        while (true) {
            long start = System.nanoTime();
            if ((read = in.read(buffer)) != -1) {
                out.write(buffer, 0, read);
            } else {
                break;
            }
            int speed = (int) ((read * 1000000000.0) / ((System.nanoTime() - start) * 1024.0));
        }
    }
Run Code Online (Sandbox Code Playgroud)

它给了我100到300,000之间的任何地方.如何才能使下载速度正确?谢谢

java stream

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

Java - 系统LookAndFeel

每个系统的LookAndFeel的所有组件大小是否相同?

UIManager.getSystemLookAndFeelClassName();
Run Code Online (Sandbox Code Playgroud)

如果不是,哪种布局类型最适合处理每个系统上的组件大小不同?

谢谢.

java swing

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

获取字符的unicode值

有没有办法获得char的键码?例如

getKeycode('C');
Run Code Online (Sandbox Code Playgroud)

有什么相似的吗?

谢谢

java keycode

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

Java - 同一窗口上的另一个JFrame

我想要的是创建一个新的JFrame,保持我当前的JFrame可见,但不创建一个新的窗口/程序.我无法解释清楚,所以这是我的意思的图片:

http://screensnapr.com/e/mkCMlm.png

对不起,如果这有任何混乱.任何帮助表示赞赏.

java swing jframe jinternalframe

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