- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个标签未在同一 GUI 实例中更新。如果我单击应更新 jLabel(代码块中的“testLabel”)上的值的 jButton,我必须再次运行 java 程序才能看到更改出现。如何让它在同一实例中单击按钮时出现?我了解 invokelater,并且一直在尝试让它实时更新,但没有运气。我已经坚持这个问题有一段时间了,所以非常感谢您的帮助。对于下面列出的代码块,我仍然需要运行 GUI 的新实例来获取要更新的值。
相关代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MISControlPanel window = new MISControlPanel();
window.frame.setVisible(true);
// testLabel.setText(CN);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
<小时/>
JButton searchComputerButton = new JButton("Search");
searchComputerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String line;
BufferedWriter bw = null;
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(tempFile));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// String lineToRemove = "OU=Workstations";
String s = null;
Process p = null;
/*
* try { // p = Runtime.getRuntime().exec(
* "cmd /c start c:\\computerQuery.bat computerName"); } catch
* (IOException e1) { // TODO Auto-generated catch block
* e1.printStackTrace(); }
*/
try {
p = Runtime.getRuntime().exec("c:\\computerQuery.bat");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
StringBuffer sbuffer = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(p
.getInputStream()));
try {
while ((line = in.readLine()) != null) {
System.out.println(line);
// textArea.append(line);
String dn = "CN=FDCD111304,OU=Workstations,OU=SIM,OU=Accounts,DC=FL,DC=NET";
LdapName ldapName = new LdapName(dn);
String commonName = (String) ldapName.getRdn(
ldapName.size() - 1).getValue();
}
ComputerQuery.sendParam();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidNameException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally
{
try {
fw.close();
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ComputerQuery.sendParam();
}
});
try (BufferedReader br = new BufferedReader(new FileReader(
"resultofbatch.txt"))) {
final Pattern PATTERN = Pattern.compile("CN=([^,]+).*");
try {
while ((sCurrentLine = br.readLine()) != null) {
String[] tokens = PATTERN.split(","); // This will return
// you a array,
// containing the
// string array
// splitted by what
// you write inside
// it.
// should be in your case the split, since they are
// seperated by ","
// System.out.println(sCurrentLine);
CN = sCurrentLine.split("CN=", -1)[1].split(",", -1)[0];
System.out.println(CN);
testLabel.setText(CN);
}
完整类代码 http://pastebin.com/havyqMxP
计算机查询类(小类) http://pastebin.com/Q89BCjya
最佳答案
正如所 promise 的...这是一个使用 swing 工作程序获取 URL 内容的简单示例,以将获取内容的任务(长时间运行的任务)与更新 swing 组件的任务分离。这将展示您应该如何解决此问题的示例...
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingWorker;
/* FrameDemo.java requires no other files. */
public class MainWindow extends JFrame {
private static final Logger LOOGER = Logger.getLogger(MainWindow.class.getName());
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private JLabel statusLabel = new JLabel("Status");
private JButton actionButton = new JButton("Push me");
public MainWindow() {
super("FrameDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
statusLabel = new JLabel("Status");
actionButton = new JButton("Push me");
statusLabel.setPreferredSize(new Dimension(400, 50));
actionButton.setPreferredSize(new Dimension(100, 50));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(statusLabel, BorderLayout.NORTH);
getContentPane().add(actionButton, BorderLayout.CENTER);
actionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// THIS METHOD IS INVOKED WITHIN THE EVENT DISPATCH THREAD!!.. SO IS CRUCIAL TO NOT PERFORM
// HERE LONG TIME RUNNING TASKS...
actionButton.setEnabled(false); // let's disable this button, in order to avoid invoking
// multiple times the same task and messing up the entire app...
UrlFechterSwingWorker urlFechterSwingWorker = new UrlFechterSwingWorker();
urlFechterSwingWorker.execute();
}
});
}
public void display() {
pack();
setVisible(true);
}
private class UrlFechterSwingWorker extends SwingWorker<String, String> {
@Override
public String doInBackground() { // this method is executed under a worker thread
BufferedReader in;
StringBuilder sb = new StringBuilder();
try {
URL url = new URL("http://www.stackoverflow.com");
in = new BufferedReader(new InputStreamReader(url.openStream()));
String line = in.readLine();
while (line != null) {
sb.append(line);
publish(line); // publish partial results....
line = in.readLine();
}
in.close();
} catch (Exception e) {
LOOGER.log(Level.SEVERE, "", e);
}
return sb.toString();
}
@Override
protected void process(List<String> readedLines) { // this method in the Event dispatch Thread
// do what you want to do with the readedLines....
statusLabel.setText("The doInBackground read... " + readedLines.size() + " lines");
}
@Override
public void done() { // this method in the Event dispatch Thread
// do what you want when the process finish
actionButton.setEnabled(true); // well.. at least i would like to enable the button again...
}
}
public static void main(String[] args) {
MainWindow mainWindow = new MainWindow();
mainWindow.display();
}
}
这里有更多提示:
在您(或多或少)了解上面示例中的工作原理之后..您将必须实现一个正确的 doInBackground
方法来执行所有 LDAP 操作,为此您你必须下定决心想出一种向最终用户通知进度的方法……我的意思是,看看我的例子,在进度推进方面非常差……我要说的是,我们读到“a给定 url 的行数”。您应该考虑通知任务进度的最佳方式是什么。除了了解底层域模型之外,没有任何模板。
请记住, Swing worker 有两种方式通知进度。
publish
和 process
方法。 (如上面的例子)doInBackground
内的内部属性(进度和状态),并将 PropertyChangeListener
附加到 swing 工作线程。这个 propertyChangeListener 对象有一个方法,其签名是 public void propertyChange(PropertyChangeEvent evt)
(在我看来,有点复杂......)耐心等待,祝你好运!
关于java - 标签未在同一 GUI 实例中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207463/
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!