小编Dra*_*gon的帖子

应用程序活动期间应用程序挂起或"不在FX应用程序线程上"

应用程序对游戏手柄上发生的操作做出反应.当按下按钮时,UI上会发生某些事情.但我遇到了app挂起或"java.lang.IllegalStateException:Not on FX application thread"异常的问题.

为了解决这个问题,我尝试了以下方法:Platform.runLater()Task使用方法.但它没有帮助.

这是问题代码:

public class GamepadUI extends Application{

    private static final int WIDTH = 300;
    private static final int HEIGHT = 213;

    private Pane root = new Pane();
    private ImageView iv1 = new ImageView();

    private boolean isXPressed = false;

    @Override
    public void start(Stage stage) throws Exception {
        initGUI(root);

        Scene scene = new Scene(root, WIDTH, HEIGHT);
        stage.setScene(scene);
        stage.setResizable(false);
        stage.show();
    }

    public void pressBtn() {
        if(!isXPressed) {
            iv1.setVisible(true);
            isXPressed = true;
        }
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java javafx

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

在一个命令中有条件地更新表的多个列

我有一个包含列的表name,client_namerequester_name.我需要将这些列的值从"Mic"更新为"Michael".

以下是一些应该更新的记录:

name  | client_name |  requester_name
------+-------------+----------------
Mic   | Jerry       | Jack
Jack  | Mic         | Mic
Jerry | Jack        | Mic
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询:

UPDATE names
SET name='Michael', client_name='Michael', requester_name='Michael'
WHERE name='Mic' OR client_name='Mic' OR requester_name='Mic';
Run Code Online (Sandbox Code Playgroud)

此查询使所有列都将所有名称更改为"Michael".
查询应该如何仅在适用的情况下应用更改?

sql postgresql sql-update

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

Maven:从属性文件中设置pom.xml中的属性

我有多模块项目,对不同的模块版本有很多依赖.目前版本是硬编码的,需要手动更改它们.因此,我决定将所有这些文件放在属性文件中,并在项目构建期间从中获取属性值.

以下是我尝试这样做的方法:

root pom.xml

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>read-project-properties</goal>
            </goals>
            <configuration>
                <files>
                    <file>./version.properties</file>
                </files>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

文件版本.properties

module1.version=1.1
module2.version=1.8
module3.version=5.4
Run Code Online (Sandbox Code Playgroud)

模块pom.xml的示例

<properties>
    <module1.project.version>${module1.version}</module1.project.version>
</properties>

<parent>
    <groupId>com.mymodule</groupId>
    <artifactId>test</artifactId>
    <version>${module1.version}</version>
    <relativePath>../pom.xml</relativePath>
</parent>
Run Code Online (Sandbox Code Playgroud)

构建失败:

无法在项目ccm-agent上执行目标org.codehaus.mojo:build-helper-maven-plugin:1.7:parse-version(parse-versions):目标org.codehaus.mojo的执行解析版本:build-helper- maven-plugin:1.7:parse-version失败.NullPointerException - > [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目ccm-agent上执行目标org.codehaus.mojo:build-helper-maven-plugin:1.7:parse-version(parse-versions) :目标org.codehaus.mojo的执行解析版本:build-helper-maven-plugin:1.7:解析版本失败.

如何从文件中读取某些属性并以正确的方式配置pom.xml?

maven

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

为什么swing会简单地绘制两次?

这是绘制椭圆形的简单示例.

public class SwingPainter extends JFrame{
    public SwingPainter() {
        super("Swing Painter");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        getContentPane().add(new MySwingComponent());

        setSize(200, 200);
        setVisible(true);
    }

    public static void main(String[] args) {
        new SwingPainter();
    }

    class MySwingComponent extends JComponent {

         public void paintComponent(Graphics g) {
            System.out.println("paintComponent");
            super.paintComponent(g);
            g.setColor(Color.red);
            g.fillOval(10, 10, 50, 50);
        }

        @Override
        protected void paintBorder(Graphics g) {
            System.out.println("Paint border");
            super.paintBorder(g);
        }

        @Override
        protected void paintChildren(Graphics g) {
            System.out.println("Paint children");
            super.paintChildren(g);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在调试模式或在绘制之前向控制台添加一些信息(如示例中),您可以看到swing绘制组件两次.

的paintComponent

油漆边框

画儿童

的paintComponent

油漆边框

画儿童

我无法理解它为什么会发生,但我认为它会影响困难的GUI中的性能.

java graphics swing awt paintcomponent

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

JTextPane的setContentType("text/html")无法正常工作

当你setContentType("text/html")时,它仅适用于通过JTextPane.setText()设置的文本.通过样式放到JTextPane的所有其他文本对内容类型"免疫".

这就是我的意思:

private final String[] messages = {"first msg", "second msg <img src=\"file:src/test/2.png\"/> yeah", "<img src=\"file:src/test/2.png\"/> third msg"};

public TestGUI() throws BadLocationException {
    JTextPane textPane = new JTextPane();
    textPane.setEditable(false);
    textPane.setContentType("text/html");

    //Read all the messages
    StringBuilder text = new StringBuilder();
    for (String msg : messages) {
        textext.append(msg).append("<br/>");
    }
    textPane.setText(text.toString());

    //Add new message
    StyledDocument styleDoc = textPane.getStyledDocument();
    styleDoc.insertString(styleDoc.getLength(), messages[1], null);

    JScrollPane scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

    //add scrollPane to the main window and launch
    //...
}
Run Code Online (Sandbox Code Playgroud)

一般来说,我有一个由JTextPane表示的聊天.我从服务器接收消息,处理它们 - 为特定情况设置文本颜色,将微笑标记更改为图像路径等.所有内容都在HTML的范围内进行.但是从上面的例子中可以清楚地看到,只有setText是setContentType("text/html")的主题,第二部分,其中添加的新消息由"text/plain"表示(如果我没有弄错的话) ).

是否可以将"text/html"内容类型应用于插入到JTextPane的所有数据?没有它,如果不实现非常复杂的算法,几乎不可能处理消息.

html java swing jtextpane

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

Java:由regexp拆分的字符串只能获得整数

我有一个字符串:[1, 2, 3, 4].我只需要整数1 2 3 4.

我尝试了以下拆分:

str.split(",");
str.split("\\D\\s");
Run Code Online (Sandbox Code Playgroud)

两个分裂返回四个元素:[1 2 3 4],但我不需要这些括号[ ].拆分正则表达式有什么问题?

更新

我不得不提到每个数字被包裹的情况都[ ]可能发生.

java string split

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

如何使用Visitor模式替换"instanceof"

我对访问者模式有点不友好,但我有一个需要访问者实现的任务(如果我想避免"instanceof"检查).

我有一个类,它是几个gwt元素的包装:Label,Panel,Widget(可以是复选框,列表框,文本框等).我使用数组作为UI的相似部分的集合.例如Label +复选框,Label +文本框; 标签+按钮等

一些元素以不同的方式构造(从例如Panel派生的另一个类的一部分).因此,我有两个相同的构造函数,但在一个地方使用重载方法.我可以合并这些构造函数并使用上面提到的方法中的"instanceof"检查元素.但我不喜欢这个解决方案,并希望使用访问者模式替换它.说实话,我不知道该怎么做,希望对你有所帮助.

这是我的一个例子:

public class MyWidgets {
    private String stringLabel;
    private Widget widget;
    private Panel panel;

    public MyWidgets(String stringLabel, Widget widget) {
      this.stringLabel = stringLabel;
      this.widget = widget;

      initPanel(stringLabel, widget);
    }

    public MyWidgets(ConstructedClass cs, Widget widget) {
       this.widget = widget;

       initPanel(cs, widget);
    }

    private initPanel(String label, Widget widget) {
      panel = SomeStaticUtilityClass.initPanel(new Label(label), widget);
    }

    private initPanel(ConstructedClass cs, Widget widget) {
      panel = SomeStaticUtilityClass(cs, widget);
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样的东西(我试图让它最大化抽象,实际上它更难).

所以我有一个使用"instanceof"的解决方案:

private initPanel(Object object, Widget widget) {
  if(object …
Run Code Online (Sandbox Code Playgroud)

java polymorphism gwt instance

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

如何在GWT中居中弹出/对话框窗口?

我有一个记录列表,每个记录都有一个打开设置窗口的按钮.此外,我有很多逻辑部分的首选项,每个部分都有一些带按钮的记录.

所以,当我点击一个按钮时,会出现一个对话框窗口,但是如果这个按钮位于页面底部的某个位置(让它成为带按钮的300条记录),我的对话框窗口会出现在顶部.因此,我必须向上滚动才能找到此窗口(有时它会出现在浏览器边框后面).

或者只是想象你配置一些东西并向下滚动页面填充每个选项,最后你保存你的配置,但是一些字段填写不正确,警告弹出窗口出现......在页面的某个地方,但不在你的指针附近,甚至不在你的指针附近当前页面的中间位置.

我的所有对话框窗口都是从DialogBox继承而来的,所以我使用的是super.show()和super.center(),但它并不像我想要的那样工作.

小信息添加:一些对话框窗口从服务器接收数据,当收到所有数据时,将显示窗口的其余部分.我怀疑这可能会导致窗口出现在错误的地方.

java gwt

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

JavaFX-2:如果没有手动设置,如何获取窗口大小?

我想在其父窗口的中心上方打开一个对话框窗口,因此我使用以下公式:

Window window = ((Node) actionEvent.getSource()).getScene().getWindow();
Scene scene = new Scene(new Group(new DialogWindow()));
Stage dialog = new Stage();
dialog.initOwner(window);
dialog.sizeToScene();

dialog.setX(stage.getX() + stage.getWidth() / 2 - dialog.getWidth() / 2); //dialog.getWidth() = NaN
dialog.setY(stage.getY() + stage.getHeight() / 2 - dialog.getHeight() / 2); //dialog.getHeight() = NaN

dialog.setScene(scene);
dialog.show(); //it is better to showAndWait();
Run Code Online (Sandbox Code Playgroud)

我没有手动设置大小,因为我需要自动调整窗口大小以适应其内容的大小.

在Linux下,它在父窗口的中心直接设置窗口.但是在Windows中它不起作用并导致不同的结果.

如果我不手动设置对话框的宽度和高度,怎么能得到它?

java javafx-2

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

如何配置Jenkins以使用ant和custom args构建项目

使用ant构建下一个项目版本的例程太多了.例程在几个属性文件中,必须在运行ant任务之前进行编辑.我看了一下Jenkins作为一个系统来进行构建(包括夜间构建),但我有一个改变属性的问题.

是否有可能(如果是,我该怎么做)在构建之前在Jenkins配置中键入参数,以便将它们传递给ant?

我真正的意思是以下架构(我在手动构建中使用):

  • 有2个属性文件包含有关构建版本,src目标,用于通知新构建的电子邮件等的数据.

  • 在Ant任务中使用相应的属性键,并在构建之前手动更改这些属性.

  • Java util读取了一些属性,并在构建期间用于它们自己的部分.

  • 在build.xml中还导入了3或4个ant XML,这些xmls还从提到的文件中读取属性.

我想做的是:

  • 更改Jenkins中的关键属性

  • 按建设项目

  • 我的数据将覆盖属性文件中的数据,或者作为ant vars值直接传递给ant的任务.

  • 结果我收到了相应通知的新版本(它们是通过ant制作的)

是否存在允许通过Jenkins使这种模式工作的机制?

先感谢您.

ant jenkins

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