小编hal*_*tan的帖子

用于大输出的Java高级文本日志记录窗格

Mathematica附带了一个简单的java程序,可以检查前端和内核之间的通信.它叫做LinkSnooper,一般来说效果很好.看起来像这样

在此输入图像描述

我想我可以在一定程度上改进程序的行为和可用性,但为了做到这一点,我需要重新实现一些部分.我需要的一个基本部分是文本窗格,它具有以下属性:

  • 它可以接收大量数据,它可能应该使用快速环形缓冲区,以便在数据增长过多时删除第一个日志行.另一种可能性是它自动开始将数据写入磁盘,并可能在用户向上滚动以查看第一个条目时重新加载它
  • 它应该能够处理彩色文本.我计划在每个到达的线路上使用一个简单的荧光笔(日志数据实际上是真正的Mathematica语法),使阅读更容易
  • 它不需要是可写的.如果文本窗格是只读的,则没有问题.

问题:这样的事情已经存在吗?目前,LinkSnooper使用底层JTextArea,在我开始编写我自己的版本之前,我想问一下是否有人已经这样做了.

编辑:

我打算做的是使用一些Logger框架,因为我觉得这些库应该能够处理大量数据.此外,它们通常提供格式化消息的接口,您可以定义可以处理不同消息的不同处理程序.我所希望的是,有人已经将它与一个可以处理大量输出的整洁工作文本窗口相结合.

java logging textbox wolfram-mathematica

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

Java SystemClipboard包含其他字节

我必须遵循以下设置:Ubuntu 12.04,Mathematica 9和IntelliJIDEA 12.每次我从Mathematica复制一些文本并将其粘贴到IDEA中时,粘贴文本的末尾会有很多额外的字节.最初似乎是IDEA中的一个错误似乎现在似乎是java本身的一个错误.我附加了一个显示行为的最小java示例.

因此,当我Plot在Mathematica中键入时,选择并复制它,然后运行示例我得到以下输出,其中第一行是打印的表单,第二行是字节:

在此输入图像描述

正如您所看到的那样Plot,后跟一个0字节和一些其他的,不一定是零的字节.在我的所有测试中,我发现有效的解决方案是使用字符串直到0找到第一个字符串,但这并不能解决根本问题.我真的希望看到这个问题得到解决,因为我经常在Mathematica和IntelliJIDEA 之间复制代码,但首先我需要知道应该为此归咎于谁.

题:

我怎样才能知道Mathematica或Java是否在这里做错了什么?我可以将Mathematica内容复制到不同的编辑器,浏览器等,我从未见过这样的东西.另一方面,我从未发现IntelliJ(Java)复制浪费.找出Mathematica是否使用剪贴板错误或Java有错误的好方法是什么?

最小的例子

Mathematica中选择一些文本,按Ctrl+ C并运行以下命令

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;

public class CopyPasteTest {

  public static void main(String[] args) {
    final String text;
    try {
      final Clipboard systemClipboard =
        Toolkit.getDefaultToolkit().getSystemClipboard();
      text = (String) systemClipboard.getData(DataFlavor.stringFlavor);
      System.out.println(text);
      for (byte a : text.getBytes()) {
        System.out.print(a + " ");
      }
    } catch (Exception …
Run Code Online (Sandbox Code Playgroud)

java linux wolfram-mathematica copy-paste

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

未评估的[[i]]形式

请考虑以下简单的说明示例

cf = Block[{a, x, degree = 3},
  With[{expr = Product[x - a[[i]], {i, degree}]},
   Compile[{{x, _Real, 0}, {a, _Real, 1}}, expr]
   ]
  ]
Run Code Online (Sandbox Code Playgroud)

这是在Compile语句的主体中传输代码的可能方法之一.它产生Part :: partd错误,因为[[i]]在评估时不是列表.

简单的解决方案是忽略此消息或将其关闭.当然还有其他方法.例如,一个可能规避的评价[[I]]通过替换它的编译体内之前它被编译

cf = ReleaseHold[Block[{a, x, degree = 3},
   With[{expr = Product[x - a[i], {i, degree}]},
    Hold[Compile[{{x, _Real, 0}, {a, _Real, 1}}, expr]] /. 
     a[i_] :> a[[i]]]
   ]
  ]
Run Code Online (Sandbox Code Playgroud)

如果编译后的函数有大量的代码,那么Hold,Release和最后的替换会对我的漂亮代码的想法产生一些影响.我还没有考虑过一个简短而好的解决方案吗?

回答Szabolcs的帖子

你能告诉我为什么你在这里使用吗?

是的,这与我无法使用的原因有关:= here.我使用With,有一个类似于#defineC的东西,这意味着在我需要的地方进行代码替换.使用:= in延迟评估和Compile的主体看到的不是它应该编译的最后一段代码.因此,

<< CompiledFunctionTools`
cf = Block[{a, x, degree = 3}, 
   With[{expr := …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica operator-precedence

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

JFlex将嵌套注释作为一个标记进行匹配

在Mathematica中,注释以#(*结尾开头,*)注释可以嵌套.我目前使用JFlex扫描注释的方法包含以下代码

%xstate IN_COMMENT

"(*"  { yypushstate(IN_COMMENT); return MathematicaElementTypes.COMMENT;}

<IN_COMMENT> {
  "(*"        {yypushstate(IN_COMMENT); return MathematicaElementTypes.COMMENT;}
  [^\*\)\(]*  {return MathematicaElementTypes.COMMENT;}
  "*)"        {yypopstate(); return MathematicaElementTypes.COMMENT;}
  [\*\)\(]    {return MathematicaElementTypes.COMMENT;}
  .           {return MathematicaElementTypes.BAD_CHARACTER;}
}
Run Code Online (Sandbox Code Playgroud)

方法yypushstateyypopstate定义为

private final LinkedList<Integer> states = new LinkedList();

private void yypushstate(int state) {
    states.addFirst(yystate());
    yybegin(state);
}
private void yypopstate() {
    final int state = states.removeFirst();
    yybegin(state);
}
Run Code Online (Sandbox Code Playgroud)

让我有机会跟踪我正在处理多少嵌套级别的评论.

不幸的是,这导致COMMENT一个注释的几个标记,因为我必须匹配嵌套的注释开始和注释结束.

问:是否有可能与JFlex的使用其API使用类似的方法yypushbackadvance()等,以在整个注释范围恰好返回一个道理,即使评论嵌套?

grammar comments lex jflex

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

调试UI并在按下键时暂停

我真的不是调试专家,最近我遇到了一个问题,希望有一个简单的解决方案.当我测试和调试IDEAMathematica插件时,我编写了一些代码,构建它并在沙盒IDEA中运行它.

对于那些不熟悉为IDEA编写插件的人:主要问题是,所有的UI代码已经存在,因为它带有IDEA.我的插件只实现了使IDEA理解Mathematica语言所需的特定接口.因此,设置断点或抛出onClickListener@Jeroen建议的类似内容是不可能的,因为我几乎没有编写任何单行的UI代码*.

现在我遇到了一切正常的情况,但是当我取消一个特定的动作时,会发生一些奇怪的事情.我不知道当我按下Esc取消此操作时调用哪个特定方法(它不是我的!).目前的观点很可能深入到IDEA的源代码中,我可以使用调试器进行导航!

问题:当我按下Esc我当前正在调试的UI程序时,无论在哪里,最简单的Java调试器是什么?

*这不完全正确,但为了一般解决方案,我想以这种方式来考虑它.

java debugging intellij-idea

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

SVG:防止相邻多边形之间的透明间隙

考虑以下小SVG显示两个相邻的三角形:

<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" version="1.1">
   <polygon points="10,0  60,0  35,50" style="fill:#cc4444;"/>
   <polygon points="35,50 85,50 60,0" style="fill:#cc3333;"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

这在我的浏览器中呈现如下

SVG

注意多边形之间的白线.虽然我理解使用混合是原因,但是当您尝试渲染例如此处所示的数学表面时,此行为非常烦人.

SVG中解决这些差距的正确解决方案是什么?一种方法是将多边形设置为stroke具有相同颜色的小多边形,但这看起来更像是对我的破解,并且在具有大量多边形的图形中,它显着增加了文件大小.

svg alphablending alpha-transparency

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

Install4J无法在Mac OS X上启动

使用JabRef,我们遇到一种奇怪的情况,一些用户在启动JabRef时会出现以下错误

错误信息

我们不会使用我们的应用程序发送JRE,而是依赖于Java安装在用户的计算机上.

我们在GitHub上有一个关于这个特殊错误的长期问题,尽管我们付出了很多努力,但似乎我们找不到问题的根源.特别是,因为没有一个开发者可以重现它.幸运的是,遇到此错误的用户之一非常友好地提供有关其计算机的所有信息:

$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

$ which java
/usr/bin/java

$ ls -l /usr/bin/java
lrwxr-xr-x 1 root wheel 74 Aug 14 12:09 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
1.8.0_161, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home

$ echo $JDK_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

我请这个特定的用户提供 …

install4j

6
推荐指数
0
解决办法
492
查看次数

将虚拟文件作为MultipartEntity发送

我想发送文件的内容为org.apache.http.entity.mime.MultipartEntity.问题是,我实际上没有文件,只有内容String.下面的测试完美的作品,这里file是一个java.io.File指向有效的PNG文件:

MultipartEntity entity = 
  new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("source", new StringBody("computer"));
entity.addPart("filename", new FileBody(file, "image/png"));
HttpPost httpPost = new HttpPost(URL);
httpPost.setEntity(entity);
HttpClient httpClient = new DefaultHttpClient();

final HttpResponse response = httpClient.execute(httpPost);
System.out.println(EntityUtils.toString(response.getEntity()));
Run Code Online (Sandbox Code Playgroud)

后来,我不会有一个真实的文件,只有它的内容String.我不太了解编码(更不用说没有)但是如果我尝试使用以下列方式创建的临时文件的相同方法

String contents = FileUtils.readFileToString(new File(path),"UTF8");
File tmpFile = File.createTempFile("image", "png");
tmpFile.deleteOnExit();
InputStream in = new ByteArrayInputStream(contents.getBytes("UTF8"));
FileOutputStream out = new FileOutputStream(tmpFile);
org.apache.commons.io.IOUtils.copy(in, out);
Run Code Online (Sandbox Code Playgroud)

path完全相同的PNG文件,其成功的第一个代码块,但这个时候,我得到一分

上传图片失败; 格式不受支持

来自服务器的错误.我怀疑是与编码有关.有人看到我做错了什么显而易见的事吗?

java

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

vega-lite 中的数据布局、图层和图例

我有一个非常简单的情况,我相信我的解决方案太复杂了,很有可能我遗漏了一些东西。假设我有time位置(x,y,z),角度(滚动,俯仰,偏航)和速度的度量。我想要一个简单的可视化,就像我目前拥有的速度图可以用作“画笔”来动态放大前两个图形。

在此处输入图片说明

我在 vega-editor 中的情节的一个小例子可以在这里找到

1. 我可以使用不同的数据布局吗?

现在,每个点都是一个对象

{
    "pitch": -0.006149084584096612,
    "roll": 0.0007914191778949736,
    "speed": 4.747345444390669,
    "time": 0.519741,
    "x": -0.01731604791076788,
    "y": 0.020068310429957575,
    "yaw": 0.0038123065311157552,
    "z": -0.016005977140476142
}
Run Code Online (Sandbox Code Playgroud)

对于许多数据点,仅用于重复列名就需要大量内存。更好的方法是将数据以表格形式存在

{
    "time": [t1, t2, t3, ...],
    "x": [...],
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是 vega 的“行第一”表示不允许这样做。我已经在 Slack 上问过有人建议在哪里使用Foldand Pivot,但我不确定如何实现这一点。是否可以使用存储为数组的数据?我自己从 C++ 程序创建数据,我可以轻松地导出不同的表示。唯一的问题是我如何让 vega-lite 理解?

2. 图层和图例。

如果我有带有“指标列”的时间序列数据,我可以轻松地创建将多个图形组合在一起的图。不幸的是,我没有那个,我找到的唯一解决方案是使用图层。有了这个,我必须明确地为不同的图表设置颜色(而不是使用方案)并且我没有得到图例。

如果图层真的只是在这里选择将 x,y,z 组合成一个“运动”图,我怎么能得到这个图的图例,告诉我红色 - > x,绿色 - > y,和蓝色 - > z?

vega-lite

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

JavaFX动态对象的文本样式

ListView我的程序中使用了许多很多样式Text的程序.目前,我正在做这样的事情

case COMMENT:
  t = new Text(lexer.comment.toString());
  t.setStyle(BASE_STYLE + COMMENT_STYLE);
Run Code Online (Sandbox Code Playgroud)

样式存储为java字符串.我的global.css应用程序中有一个用于为场景的某些静态节点设置样式,但对于以编程方式创建的文本,我不知道如何访问它.我尝试使用t.setId(..)并在css文件中放置样式定义,但这不起作用.

有没有办法可以将我的不同文本类型的所有样式存储在一个CSS中并轻松访问它们?请注意,我正在创建许多这些文本对象.

css javafx

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