小编Nat*_*han的帖子

重新分配作业并添加围栏

以下Java代码看起来有点奇怪,因为我已将其简化为基本要素.我认为代码有一个排序问题.我正在查看JSR-133 Cookbook中的第一个表,看起来普通商店可以使用volatile存储库进行重新排序change().

可以分配给m_normalchange()移动未来的分配m_volatile?换句话说,可以get()回归null吗?

解决这个问题的最佳方法是什么?

private          Object m_normal   = new Object();
private volatile Object m_volatile;

public void change() {
    Object normal;

    normal = m_normal;      // Must capture value to avoid double-read

    if (normal == null) {
        return;
    }

    m_volatile = normal;
    m_normal   = null;
}

public Object get() {
    Object normal;

    normal = m_normal;      // Must capture value to avoid double-read

    if (normal != null) {
        return …
Run Code Online (Sandbox Code Playgroud)

java volatile variable-assignment memory-fences

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

如何列出已停止的Docker容器中的文件

此问题显示如何从已停止的容器中复制文件.这要求我知道文件的完整路径,包括其文件名.我知道我要复制文件的目录,但我不知道它的文件名,因为它是动态生成的.如何列出已停止的Docker容器中的目录中的文件?

如果Docker容器正在运行,以下Docker命令可以正常工作.但是,如果Docker容器停止,它将失败.

docker exec --privileged MyContainer ls -1 /var/log
Run Code Online (Sandbox Code Playgroud)

docker

10
推荐指数
5
解决办法
7358
查看次数

你为什么要处理一个超出范围的java.awt.Window?

我在我们的应用程序中发现的一个内存泄漏是java.awt.Window.allWindows私有静态字段,它跟踪每个Window实例化的内容.我们创建,使用,然后忘记了对话框,期望这些对话框会消失并被垃圾收集.这个私有字段会无限期地将它们保留在范围内,直到dispose()调用它们为止.根据定义,当他们超出范围时,我们不能这样做.

我不明白为什么这是这样设计的.与垃圾收集的精神相反,当我完成一个Window对象时,必须明确让系统知道.显然我已经完成了它,因为它超出了范围.

我理解该dispose()方法正在做什么:摆脱系统对等对象.我确实理解这是在Java之外,你需要一些方法来做到这一点,并且Swing不应该只是失去对这些对象的跟踪,否则它会有内存泄漏.但是Window,当我永远不再使用它时,通过永久保持对我周围的参考来实现的目标是什么?

有人可以解释为什么这是必要的吗?

java garbage-collection memory-leaks memory-management

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

XYline图表JFreeChart中不同系列的不同颜色

我使用JFreeChart创建了XY折线图,有两个数据集,我希望两条线都有不同的颜色.我尝试使用以下代码 -

  XYPlot plot = chart.getXYPlot();
  XYItemRenderer xyir = plot.getRenderer();
  xyir.setSeriesPaint(0, Color.GREEN);
  plot.setDataset(0, xyDataset1);

  xyir.setSeriesPaint(1, Color.blue);
  plot.setDataset(1, xyDataset2);
Run Code Online (Sandbox Code Playgroud)

此外,我尝试使用以下代码,我使用不同的渲染器(不知道这是否是正确的方法) -

  XYPlot plot1 = chart.getXYPlot();
  XYPlot plot2 = chart.getXYPlot();

  XYItemRenderer xyir1 = plot1.getRenderer();
  xyir1.setSeriesPaint(0, Color.GREEN);
  plot1.setDataset(0, xyDataset1);

  XYItemRenderer xyir2 = plot2.getRenderer();
  xyir2.setSeriesPaint(1, Color.blue);
  plot2.setDataset(1, xyDataset2);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,它都打印出蓝色的线条.怎么了??有什么建议??

java jfreechart

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

通过JNLP传递动态参数

我正在使用JavaScript来执行JNLP,最终将执行我的客户端.

我试图通过JavaScript执行将参数传递给JNLP并通过我的客户端内的JNLP获取这些参数.

JavaScript正在执行此URL,例如:

http://localhost:8080/MyJnlp.jnlp?login=14hhh765p&pass=ggyyktff
Run Code Online (Sandbox Code Playgroud)

现在我的JNLP将尝试以<application-desc name tag这种方式获取参数:

<application-desc name="..." main-class="com.main.execute" >
        <argument>-nosplash</argument>
        <argument>-q</argument>
    <argument><%=request.getParameter("login")%></argument>
    <argument><%=request.getParameter("pass")%></argument>
</application-desc>
Run Code Online (Sandbox Code Playgroud)

但它没有用.

我无法以这种方式在我的客户端代码中检索这些参数:

login=getParamsFromJnlp("login")
..

public String getParamsFromJnlp(String key) {
    return System.getProperty(key);
}
Run Code Online (Sandbox Code Playgroud)

JNLP在APACHE2.2中

知道什么是错的吗?

java apache jnlp java-web-start web

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

如何在多选中获得JTable中的聚焦单元格

我有JTable10行.如果我有多个选项JTable,我如何获得当前聚焦的单元格?

我试图用JTablegetEditingColumn()getEditingRow(),但他们总是返回-1多个选择中.

java swing jtable

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

使JVM使用My Own Class Loader

我写了自己的类加载器.我需要使用类加载器加载所有类.我已通过VM以下内容:-Djava.system.class.loader=MyClassLoader

只使用我的类加载器加载我的包中第一个引用的类.我的包中的其他类正在使用AppClassLoader.

这是MyClassLoader看起来像:

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;

public class MyClassLoader extends ClassLoader {

  public MyClassLoader() {
    super(MyClassLoader.class.getClassLoader());
  }

  public MyClassLoader(ClassLoader parent) {
    super(parent);
  }

  @Override
  public Class<?> loadClass(String name) throws ClassNotFoundException {
    System.out.println("MyClassLoader is loading " + name);
    return super.loadClass(name);
  }//loadClass

  @Override
  public synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
    System.out.println("MyClassLoader is loading " + name + " with resolve = " + resolve);
    return super.loadClass(name, resolve);
  }

  @Override …
Run Code Online (Sandbox Code Playgroud)

java classloader

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

dstat cpu输出中的'hiq'和'siq'字段是什么?

dstat CPU指标有两个名为hiq和的字段siq.这些字段代表什么?它们是某种硬件中断和软件中断吗?

metrics

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

什么是重定向到 NUL 或 /dev/null 的跨平台兼容方式?

在 Windows 上,可以使用> NUL将管道重定向到空。在 Linux 上,一种使用> /dev/null. 是否有跨平台兼容的方式将管道重定向到两个平台的空?换句话说,我将能够使用它而不必担心命令在哪个平台上执行。

例如,我希望能够将以下命令编写为一个命令。

echo Hello > NUL
echo Hello > /dev/null
Run Code Online (Sandbox Code Playgroud)

当然,任何更复杂的事情都需要单独的脚本。用例是从跨平台语言(例如 Java、Python)执行的单个命令。我想避免检测平台,而是使用通用解决方案。

此外,用例是将访问 100 台机器,安装比简单地检测平台和调整命令更复杂。

linux windows command-line io-redirection

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

Eclipse/EGit查看文件的先前版本(Git)

在EGit中可以看到文件的简单历史吗?

Team> Show in history显示所有文件的所有提交.没有用.

我正在寻找文件的历史."历史记录"视图中有一个按钮,Show changes to selected resource但是无法选择资源.

除非该版本具有标记,否则似乎没有任何方式可以与特定版本进行比较.

这些碎片似乎在那里,但它们是否正确放在一起?

(没有复杂的分支或其他聪明.我通常使用命令行进行此类工作,但不应该这样做.)

eclipse git egit

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