小编Chr*_*ett的帖子

垃圾收集和反射

我想知道当你有一个带有反射的类来获取一些字段值时垃圾收集是如何工作的.JVM如何知道这些字段引用的值是可访问的,因此当正式语言语法不用于访问它们时,目前不符合垃圾收集的条件?

一个表示问题的小片段(尽管这里过分强调反思):

/**
 *
 */

import java.lang.reflect.Field;

public class B {
    protected B previous = null, next = null;

    /**
     *
     */
    public B(B from) {
        this.previous = from;
    }

    public void transition(B to) {
        this.next = to;
    }

    public B next() {
        try {
            Field f = getClass().getField("next");
            f.setAccessible(true);
            try {
                return (B)f.get(this);
            } finally {
                f.setAccessible(false);
            }
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
    }

    public B previous() {
        try {
            Field f = getClass().getField("previous");
            f.setAccessible(true); …
Run Code Online (Sandbox Code Playgroud)

java reflection garbage-collection memory-leaks

7
推荐指数
2
解决办法
1907
查看次数

使用JNI通过std :: ostream从C++获取文本数据到Java

我有一个C++类,它接受一个std::ostream参数,以便连续输出文本(跟踪信息).我需要尽可能高效地将这个文本传递给Java端.最好的方法是什么?我正在考虑使用直接缓冲区,但另一种方法是将所有函数调用传递给Java并在那里进行所有处理,但似乎我需要大量的JNI调用.

如果可以显示确切实现方法的示例,那将非常有用,或者如果已经存在某些代码(可能是另一个项目的一部分).另一个帮助是将其直接连接到标准的Java流构造,这样整个实现对开发人员来说是完全透明的.

(编辑:我发现通过JNI接口共享输出流似乎是重复的,但实际上并没有多少帮助 - 他似乎没有找到他想要的答案)

干杯,
克里斯

java java-native-interface text stream ostream

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

永远无法达到以下替代方案:2

我正在尝试创建一个非常简单的语法来学习使用ANTLR,但我收到以下消息:

"永远无法达到以下选择:2"

这是我的语法尝试:

grammar Robot;

file    :   command+;
command :   ( delay|type|move|click|rclick) ;
delay   :   'wait' number ';';
type    :   'type' id ';';
move    :   'move' number ',' number ';';
click   :   'click' ;
rclick  :   'rlick' ;
id  :       ('a'..'z'|'A'..'Z')+ ;
number  :       ('0'..'9')+ ;
WS  :   (' ' | '\t' | '\r' | '\n' ) { skip();} ;
Run Code Online (Sandbox Code Playgroud)

我正在使用IDEA的ANTLRWorks插件:

这就是它的样子

java grammar antlr antlrworks

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

使浮动合理化的高性能算法

给定一个浮点数,我希望得到一个String近似小数的有理数的表示(在给定的容差范围内ε很好).我目前的做法如下:

String rationalize(double d)
{
    String s = Double.toString(d);
    s = s.substring(s.indexOf('.')+1, s.length());
    return s + " / " + ApintMath.pow(new Apint(10), s.length()).toString();
}
Run Code Online (Sandbox Code Playgroud)

如果你不熟悉它,ApintMath.pow即使使用任意长数也会工作,这很好,因为我试图转换小数位数千位的小数.我的算法的性能很糟糕.

我将此归结为两件事,但可能会有更多:

  1. 我获得分数的方法非常幼稚.我相信有更好的方法.
  2. 该分数是未简化的,因此使用该分数的任何后续计算可能会浪费大量时间.

你会怎么做?还有其他我没有谈过的领域让我感到沮丧吗?

java floating-point rational-numbers

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

寻找一个高效的基于Java Swing的控制台

我正在寻找一个高效的Swing Java组件,我可以将其插入到我的应用程序UI中.我已经尝试过使用Swing中的类,比如JTextArea,但是没有用; 它们的性能不够高,并且有任何严重的缺点.此外,如果它具有标准控制台功能,如滚动锁定,清除控制台,颜色等等,那就太好了.

编辑:忘了说,这个控制台会有大量的调试信息流入它,它需要完全可滚动.

干杯,
克里斯

java console swing text components

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

java:如何创建元组数组

如何在 jsp (java) 中创建元组数组,如 (a:1, b:2) (c:3, d:4) ... ...

java jsp tuples set data-structures

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

与Substance UI和自定义JComponent的TitledBorder问题

我正在使用BorderFactorySubstance UI主题Swing用户界面创建一个标题边框,我遇到了如下所示的异常.我试过LineBorder并且它完美地工作,但看起来Substance UI正在以某种方式干扰TitledBorder.边框绘图在paintComponentvia中完成:

if (getBorder() != null) {
   getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());
}
Run Code Online (Sandbox Code Playgroud)

这可能是不正确的.我的问题基本上是如何TitledBorder在不创建父母的情况下开始工作JPanel并将其设置为相反,这看起来像是一个副作用.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at org.pushingpixels.lafwidget.utils.RenderingUtils.desktopHints(RenderingUtils.java:113)
    at org.pushingpixels.lafwidget.utils.RenderingUtils.installDesktopHints(RenderingUtils.java:85)
    at org.pushingpixels.substance.internal.utils.border.SubstanceEtchedBorder.paintBorder(SubstanceEtchedBorder.java:132)
    at javax.swing.border.TitledBorder.paintBorder(TitledBorder.java:330)
    at javax.swing.JComponent.paintBorder(JComponent.java:947)
    at javax.swing.JComponent.paint(JComponent.java:1055)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5213)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1493)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1424)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
    at javax.swing.JComponent.paint(JComponent.java:1040)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
    at …
Run Code Online (Sandbox Code Playgroud)

java swing border jcomponent substance

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

JTable中的并发问题

我有一个JTable和一个自定义模型,在呈现阶段修改该模型时,存在并发访问问题。我收到类似以下的异常,因为我假设它获取表的长度,更新了模型,然后访问了一个不存在的模型元素。呈现期间,AbstractTableModel需要使用行/列索引重新访问模型以获取所需的信息,而且似乎没有任何锁定,这意味着数据可以自由更改。

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.LinkedList.checkElementIndex(LinkedList.java:553)
    at java.util.LinkedList.get(LinkedList.java:474)
    at koku.ui.PlayerList$PlayerInfoTblModel.getValueAt(PlayerList.java:250)
    at javax.swing.JTable.getValueAt(JTable.java:2720)
    at javax.swing.JTable.prepareRenderer(JTable.java:5718)
    at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2117)
    at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2019)
    at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1815)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at javax.swing.JComponent.paintComponent(JComponent.java:778)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JViewport.paint(JViewport.java:725)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5206)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5154)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4964)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:781)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:739)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:688)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1632)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:660)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) …
Run Code Online (Sandbox Code Playgroud)

java concurrency swing locking jtable

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

Android Toast将不会出现

真的很烦人。我试图显示一个简单的吐司,但它不会出现。

public class MainActivity extends Activity implements UserPromptDialogListener  {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    public ProgressDialog progressDialog;
    public static String SELECTION_TYPE="type";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CharSequence text = "I am a toast sss";
        Toast t1 = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
        t1.show();

        Log.d("AAA", "After toast show");
    }
    //other methods
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过thisMainActivity.this等等,但是它似乎没有用。

感谢您的帮助。

android toast

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

HashSet.equals()是否在恒定时间内运行?

只是想知道是否HashSet.equals(anotherHashSet)在恒定时间内运行(也使用ConcurrentHashSetas参数),我认为这样做是出于效率原因.看不到任何提到它的东西,我正在构建的框架的一部分依赖于功能(不希望它花费太长时间!).

编辑:抱歉,意识到HashSet.equals()无法在恒定时间内运行,因为元素可以更改,而地图中元素的哈希码保持不变.因此,解决此问题的最佳方法是使用哈希码.虽然味道很难闻到吗?

java collections big-o hashset time-complexity

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

将整数映射到深色

我想知道如何将整数映射到颜色,但这样做是为了使序列对颜色没有太大影响(虽然它确实无关紧要),并且还要将相同的数字插入到反复使用的功能会产生相同的颜色.

它适用于JTable,并对表的行着色以突出显示具有相同ID的类似行.存储任何元数据意味着许多混乱和低效率,我想避免.

基本上,id f(x)->c for all x in the positive range of integers such that f(x)->c1, f(x+1)->c2, c1 !~ c2在哪里x,c结果是颜色.我曾考虑过使用Random,但这会根据生成数字的顺序而改变.如果没有添加顺序,那就没关系.

我忘了提一下,颜色应该是暗的,以便白色文字能够正确显示.

干杯,
克里斯

java random swing jtable colors

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

onCreateDialog和动态对话框(Android)

我有一点问题.在我定义的程序中

protected Dialog onCreateDialog(int id) {
    if (id == CONTEXT_MENU_ID) {
        return createMyDialog();
    }
    return super.onCreateDialog(id);
}
Run Code Online (Sandbox Code Playgroud)

然后显示对话框调用

showDialog(CONTEXT_MENU_ID)
Run Code Online (Sandbox Code Playgroud)

我的问题是有时我想在执行之间动态地更改Dialog的文本.但是使用该方法,Dialog永远不会重新创建.如何在显示Dialog之前调用createMyDialog()?

谢谢

java android dialog

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

Java双重只是不会否定!为什么?

出于某种原因,我无法否定double,然后返回它的时候一定条件满足(这得到满足).尽管有任何哄骗,它仍保持积极态度.

 public static double angleDiffNoAbs(double from, double to, double maxValue) {  
  double diff = to - from;
  double absdiff = Math.abs(diff);

  if (absdiff > maxValue) {
   double newdiff;

   boolean clockwise = false;

   if (from < to) {
    newdiff = maxValue;
    clockwise = true;
    System.out.println("c");
   } else {
    System.out.println("ac");
    newdiff = maxValue * -1.0d;
   }

   System.out.println("from: " + from + ", to: " + to + ", diff: " + diff + ", absdiff: " + absdiff + ", …
Run Code Online (Sandbox Code Playgroud)

java double types

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