小编Joo*_*kka的帖子

Swing 中的属性列表 GUI 组件

如何在 Swing 中制作“属性列表”组件?我的意思是在这张这张图片中的那种。它只是一个自定义的 JTable 组件,还是一个自定义组件?

java swing

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

没有HTML的Javadocs

Robert C. Martin的书清洁代码包含以下内容:

源代码注释中的HTML是令人厌恶的[...]如果某些工具(如Javadoc)将提取注释以​​显示在网页中,那么它应该是该工具的责任,而不是程序员的装饰适当的HTML评论.

我有点同意 - 如果没有HTML标签,源代码肯定看起来更干净 - 但是你如何制作看起来不错的Javadoc页面呢?如果不使用HTML标记,就无法分隔段落.Javadoc手册清楚地说:

doc评论是用HTML编写的.

是否有一些预处理工具可以帮助到这里?Markdown语法可能是合适的.

html comments javadoc

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

获取模块名称:x .__ module__ vs x .__ class __.__ module__

我想获取Python对象所来自的模块.都

x.__module__
Run Code Online (Sandbox Code Playgroud)

x.__class__.__module__
Run Code Online (Sandbox Code Playgroud)

似乎工作.这些完全是多余的吗?是否有理由偏爱另一个?

python module python-module

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

将耗时的JNI任务作为线程调用

我在使用线程中的JNI调用本机函数时遇到了一个棘手的问题.

本机函数是执行计算密集型任务的遗留代码.由于我不想冻结程序的其余部分,因此应该在后台线程中执行计算.EventBus用于将计算结果发送回主程序.

基本上它应该很简单,像这样:

public class CalculationEngine {
  private CalculationEngine(){}

  public static void calculateInBackground(final Parameters parameters) {

    new Thread(new Runnable() {
      public void run() {
        // Someone might change the parameters while our thread is running, so:
        final Parameters clonedParameters = parameters.clone();
        Results results = new Results();
        natCalc(clonedParameters, results);
        EventBus.publish("Results", results);
      }
    }).start();

  }

  public static void calculateNormally(final Parameters parameters) {
    Results results = new Results();
    natCalc(parameters, results);
    EventBus.publish("Results", results);
  }

  private static native synchronized void
    natCalc(Parameters …
Run Code Online (Sandbox Code Playgroud)

java-native-interface multithreading

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

从Class <T>到Thing <T>的类型安全映射

我想制作一个具有以下界面的地图类容器:

public <T> Thing<T> get(Class<T> clazz);
public <T> void put(Class<T> clazz, Thing<T> thing);
Run Code Online (Sandbox Code Playgroud)

有趣的是,T每个Class<T>- > Thing<T>对中的s 是相同的T,但容器应该能够容纳许多不同类型的对.最初我尝试了一个(哈希)地图.但是,例如,

Map<Class<T>, Thing<T>>
Run Code Online (Sandbox Code Playgroud)

是不对的,因为那个地图中的所有都是T一样T的.当然,

Map<Class<?>, Thing<?>>
Run Code Online (Sandbox Code Playgroud)

工作,但后来我没有类型安全保证,所以当我get(String.class),我不能确定我得到一个Thing<String>实例.

有没有一种明显的方法来实现我正在寻找的那种类型的安全性?

java generics mapping type-safety

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

将全局应用程序数据放在Vista中的位置?

在Windows(Vista)的系统,我应该在哪里地方,应该是可读的数据,并通过每个人的计算机即每个用户可写的,?Vista的C:\ Users\xxx\AppData\something,C:\ Program Files和C:\ ProgramData目录和UAC的概念有点令人困惑.

此外,有没有现成的解决方案来确定Java的位置?我想它需要与本机库进行一些交互,因为System.getProperties只有user.home和user.dir,它们都不是全局可写的.

java directory permissions global windows-vista

3
推荐指数
2
解决办法
4317
查看次数

如何制作setVisible块的非模态对话框?

在Swing(J)对话框中,setModal设置模态 - 即对话框是否应阻止对其他窗口的输入.然后,setVisible docs说模态对话框:

如果对话框尚未显示,则在通过调用setVisible(false)或dispose隐藏对话框之前,此调用将不会返回.

实际上,如果对话框不是模态的,setVisible 它会立即返回.示例代码:

JDialog jd = new JDialog();
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

/**
 * If set to false, setVisible returns right away.
 * If set to true, setVisible blocks until dialog is disposed.
 */
jd.setModal(false);

System.out.println("setting visible");
jd.setVisible(true);
System.out.println("set visible returned");
Run Code Online (Sandbox Code Playgroud)

我想创建一个阻止输入到其他窗口的对话框,但仍然阻止调用者.有什么好方法可以做到这一点,现在setVisible当对话框不是模态时不阻止?

有一些理由说明为什么 setVisible行为取决于形态?

java swing visibility dialog blocking

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

使用构建器/工厂模式确保内存可见性

以下课程:

class Pizza {

    Ingredients ingredients;
    Price price;

    public setIngredients(Ingredients ing) {
        if (ingredients != null) {
            throw new IllegalStateException();
        }
        ingredients = ing;
        return this;
    }

    public setPrice(Price p) {
        if (price != null) {
            throw new IllegalStateException();
        }
        price = p;
        return this;
    }

}
Run Code Online (Sandbox Code Playgroud)

可以在构建器模式中使用,在构建之后,它实际上是不可变的,因为每个属性只能设置一次.那是:

Pizza pizza = new Pizza().setIngredients(something).setPrice(somethingelse);
Run Code Online (Sandbox Code Playgroud)

但是,Pizza它不是线程安全的:不能保证线程B看到线程A设置的成分.有一些方法可以解决它:

  • 成员final.但是你不能使用构建器模式.
  • 同步对成员的访问权限.但这似乎是浪费,因为它们只写过一次.
  • 制作它们volatile.像同步一样感觉浪费.
  • 使用AtomicReference.
  • 等等.?

我的问题是,告诉JVM一个类成员在调用某个方法后不会改变的最佳方法是什么?我应该只是同步对它的访问,并相信JVM会优化锁定吗?它只是感觉浪费,因为我知道成员应该final在它设置之后表现得像它一样.有没有更好的解决方案?

java volatile synchronized thread-safety memory-visibility

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