【问题标题】:How can I switch from JFrame to java class?如何从 JFrame 切换到 java 类?
【发布时间】:2014-11-29 06:02:37
【问题描述】:

我一直在试图弄清楚如何从 JFrame 转到我的 java 类。

到目前为止,这是我的代码:(它只打开 main..这是 JFrame)

Process process = Runtime.getRuntime().exec("cmd.exe /c start java -jar \C:\Users\Admin\Documents\NetBeansProjects\Program\dist\Program.jar");
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));

main 曾经是类,使我可以轻松地使用 setvislble() 作为框架,但现在我需要它,而 main 现在是 JFrame。我需要知道如何打开类文件。 (另外,如果有人知道除了使用 CMD 之外如何切换,那就太好了!)

我已经尝试过使用它以及其他变体的组合,但它不起作用。

java -cp "C:\Users\Admin\Documents\NetBeansProjects\Program\dist\Program.jar class"

【问题讨论】:

  • 投票结束 - 不清楚你在问什么
  • Process process = Runtime.getRuntime().exec("cmd.exe /c start java -jar \C:\Users\Admin\Documents\NetBeansProjects\Program\dist\Program.jar"); 就像手指在粉笔板上抓挠一样.. 而是将Program.jar 添加到运行时类路径并调用相关的构造函数/main(String[])..
  • 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用exec并使用ProcessBuilder创建进程。
  • 感谢您回复@AndrewThompson。我不是在尝试运行或打开 Program.jar,而是在尝试打开一个类(例如 class.java)。打开 Program.jar 会改为打开 JFrame。
  • 另外@mKorbel 我的问题是如何从 JFrame(例如带有按钮)跳到 java 类(例如 something.java)。希望说明清楚。

标签: java swing oop jframe


【解决方案1】:

JFrame 按钮,如果我的理解是正确的,它并不能很好地处理无限循环。

这个想法不是阻止 EDT,但肯定有正确的方法在 Swing 中重复一个动作(除非另有说明),以及执行长时间运行的任务的方法。以下是我通常给出的一些建议:

不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing

但回到手头的事情..

..让用户在 GUI 中输入信息,然后将该信息发送到文本文件中。该类读取文本文件,获取信息并执行其操作..

好吧,这是 10 种不同的错误。

假设 GUI 名为 GUI.class,另一个类名为 Worker.class

Worker.class

此类可能有一个无参数构造函数以及一个接受InputStream 的构造函数(对于文本文件,如果最终需要)。

Worker 类可能有一个 main(String[]),它创建了一个 Worker 对象的实例。它可能会使用:

  1. InputStream 用于 Worker 的构造函数,用于配置完成工作所需的字段。
  2. Worker 实例的无参数构造函数,然后使用 setter 方法 对其进行配置。 (可能会通过命令行提示用户提供信息。)

main 完成此操作后,在 Worker 实例上调用 execute() 并调用 getter 方法 获取结果,然后将结果写入 System.out

GUI.class

GUI 也可以使用Worker 实例。它可能会使用 no-args 变体,然后将 setter 方法绑定到 GUI 中的输入控件。一旦用户点击Execute按钮,execute()进程,然后查询getter方法以向用户显示结果(仍在GUI中)。

【讨论】:

  • 虽然这有助于我将结果从 GUI 交换到类,但我仍然需要知道如何从 JButton 打开 .class 文件?如果您认为无法打开 .class 文件,如果您知道如何让我的想法完全在 GUI 中运行,这里有一些细节。我所说的“无限循环”是这样的:一旦存储了数据,该程序读取一个特定单词的网站,如果找不到该单词,它将继续检查直到找到为止。有没有办法将这个想法融入您的“不阻塞 EDT”方法中?
  • “我还需要知道如何从 JButton 打开 .class 文件?” 停止思考“打开类文件”并开始思考“创建一个要使用的类'。如果该类位于应用程序的运行时类路径上,请按照我上面描述的方式进行操作。创建该类的一个实例,对其进行配置并使用它。我不明白你在哪一部分遇到了麻烦..
  • "..如果没有找到这个词,它会一直检查直到找到。有没有办法将这个想法融入你的“不阻塞 EDT”方法中?”如果您阅读了我链接到的 Swing 中的并发文章,您就会知道答案。不要指望被勺子喂食。
  • 在阅读了您的 cmets、文章和其他几篇文章后,我明白了! SwingWorker 完成了这项工作。非常感谢您的耐心和帮助!
  • "..我想通了!" 恭喜!很高兴你把事情解决了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2021-11-12
  • 2019-04-07
  • 2021-09-25
相关资源
最近更新 更多