JAVA菜鸟求助,想用实现输入一个ISBN实现多站点检索
多线程传参数出现了问题:
要不可以打开三个网站但数值都为空;
要不有数值但只能打开一个网站;
谢谢大神帮助!代码如下:
package TestThread;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class TestThread extends JFrame{
public TestThread() {
setTitle("美国常春藤联盟图书馆查询");
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JTextField textField = new JTextField();
contentPane.add(textField, BorderLayout.NORTH);
textField.setColumns(10);
JLabel lblNewLabel = new JLabel("请输入要查询的ISBN");
contentPane.add(lblNewLabel, BorderLayout.CENTER);
JButton btnNewButton = new JButton("检索");
contentPane.add(btnNewButton, BorderLayout.SOUTH);
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(textField.getText());
String ISBN = textField.getText();
new OpenPageHarvard().start();;
new OpenPagePenn().start();
new OpenPageYale().start();
}
});
}
public static String ISBN;
static class OpenPageHarvard extends Thread{
public void OpenPageHarvard(String ISBN){
try {
String urlHarvard = "https://hollis.harvard.edu/"
+ "primo-explore/search?search-banner-"
+ "input="+ISBN+"&tab=everything&vid=HVD2"
+ "&lang=en_US&offset=0&query=any,contains,"+ISBN;
java.net.URI uriHarvard = java.net.URI.create(urlHarvard);
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
dp.browse(uriHarvard);// 获取系统默认浏览器打开链接
}
} catch (java.lang.NullPointerException e) {
// 此为uri为空时抛出异常
e.printStackTrace();
} catch (java.io.IOException e) {
// 此为无法获取系统默认浏览器
e.printStackTrace();
}
}
public void run() {
OpenPageHarvard(ISBN);
System.out.println("我是线程1");
//System.out.println("Hello MyThread1");
}
}
static class OpenPagePenn extends Thread{
public void OpenPagePenn(String ISBN) {
try {
String urlPenn = "https://franklin.library.upenn.edu/bento?q="+ISBN;
java.net.URI uriPenn = java.net.URI.create(urlPenn);
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
dp.browse(uriPenn);// 获取系统默认浏览器打开链接
}
} catch (java.lang.NullPointerException e) {
// 此为uri为空时抛出异常
e.printStackTrace();
} catch (java.io.IOException e) {
// 此为无法获取系统默认浏览器
e.printStackTrace();
}
}
public void run() {
OpenPagePenn(ISBN);
System.out.println("我是线程2");
//System.out.println("Hello MyThread2");
}
}
static class OpenPageYale extends Thread {
public void OpenPageYale(String ISBN) {
try {
String urlPenn = "https://search.library.yale.edu/quicksearch?q="+ISBN+"&commit=Search";
java.net.URI uriPenn = java.net.URI.create(urlPenn);
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
dp.browse(uriPenn);// 获取系统默认浏览器打开链接
}
} catch (java.lang.NullPointerException e) {
// 此为uri为空时抛出异常
e.printStackTrace();
} catch (java.io.IOException e) {
// 此为无法获取系统默认浏览器
e.printStackTrace();
}
}
public void run() {
OpenPageYale(ISBN);
System.out.println("我是线程3");
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestThread frame = new TestThread();
frame.setVisible(true);
frame.setResizable(false);;
Toolkit defaultToolkit=Toolkit.getDefaultToolkit();
Dimension screenSize=defaultToolkit.getScreenSize();
frame.setLocation((screenSize.width-400)/2,(screenSize.height-300)/2);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
相关推荐
Go编程基础教程:Web开发入门
作者:禅与计算机程序设计艺术 1.背景介绍 Go简介 Go是Google于2009年推出的一种新的开源编程语言,它具有简单、易用、高效、静态强类型、丰富包管理工具等特性。它被认为是第二种“更简单”的编程语言。Go旨在解决一些运行时的问题,如并发性、垃圾回收、内存
【高速互连技术】基于线性均衡的PCIe链路扩展方案:重驱动器在高损耗通道中的信号完整性优化
内容概要:本文介绍了如何利用线性均衡技术扩展PCI Express(PCIe)链路的传输距离,重点探讨了重驱动器(Re-Driver)在补偿PCB和电缆信道损耗中的作用。文章回顾了Re-Driver的发展历程,分析其性能特点,解释其在不同信道环境下的应用条件,并强调线性操作对保持信号完整性及满足PCIe规范的重要性。通过眼图分析、频率响应和Tx预设波形等手段,展示了R
谐波去噪基于随机奇异值分解和软阈值的大型数据集中的强大高效谐波去噪研究(Matlab代码实现)
内容概要:本文研究了一种基于随机奇异值分解(Randomized SVD)和软阈值(Soft Thresholding)的高效谐波去噪方法,旨在解决大型数据集中谐波干扰的抑制问题。该方法通过引入随机化技术加速传统奇异值分解过程,在保障信号主要特征完整性的同时,显著提升了高维数据处理的计算效率与实时性,适用于电力系统、通信等领域的复杂信号处理场景。文中系统阐述了算法的数学理论基础、实现步骤及在Matlab环境下的具体代码实现,并通过仿真实验验证了其在不同噪声水平下对谐波成分的有效识别与去除能力,展现出优异的鲁棒性与工程实用价值。; 适合人群:具备一定信号处理理论基础和Matlab编程能力,从事电力系统分析、通信工程、自动化控制或相关领域研究的研发人员及硕士、博士研究生。; 使用场景及目标:①应用于大规模实测信号中谐波成分的快速提取与抑制;②用于提升电能质量监测、设备故障诊断、精密仪器测量等应用中的信号信噪比;③为高维时序数据的高效去噪提供可复现、易部署的算法模板与技术参考。; 阅读建议:建议读者结合提供的Matlab代码逐模块理解算法实现细节,重点掌握随机SVD与软阈值去噪的协同机制,并尝试在实际采集数据上进行参数调优与性能测试,以深入理解其适用边界与优化潜力。
binutils-2.19.92.tar.bz2
binutils-2.19.92.tar.bz2
Agent Skills 实战速查包(Claude Code 技能体系/格式全表/加载位置/触发传参/上下文成本/打包分发/安全治理/排错)
Agent Skills 是 2025 年底以来 AI 编码工具领域事实上的新开放标准(Anthropic 开源、agentskills.io 承载规范),Claude Code、claude.ai、Claude API 及各兼容 agent 都在用;但规范页、Claude Code 文档、示例仓库三处全英文且互相引用,行为细节(比如哪些 frontmatter 字段出了 Claude Code 上传就会失败)散落各段。本包按「看懂格式 → 放对位置 → 控制触发 → 算清 token → 打包分发 → 审安全 → 排错」一条线整理:技能三层渐进加载与 CLAUDE.md/命令/MCP 的边界、7 种加载位置与同名优先级、SKILL.md 开放标准 6 字段 + Claude Code 扩展 17 字段逐条约束与跨产品红线、$ARGUMENTS/$1/命名参数两种传参、描述列表 1% 压缩预算与 skillOverrides 四状态、context:fork 子代理与动态注入的完整行为矩阵(位置规则/失败语义/权限检查)、官方写法最佳实践与对照基线的 eval 闭环、Git/插件市场/企业托管三条分发路与 marketplace.json 结构、自放行与第三方技能进场审查、YAML 解析失败静默降级与非零退出中止整个技能调用等 16 类症状反查。附 SKILL.template、marketplace.template、settings.template 三份可直接改占位的骨架与一个零依赖校验脚本(合法 exit 0、错误 exit 1 逐条打印)。本包不含任何程序本体,只整理规则与配置骨架;示例一律 YOUR_*/your-* 占位。


