291,254
社区成员
多线程传参数出现了问题:
要不可以打开三个网站但数值都为空;
要不有数值但只能打开一个网站;
谢谢大神帮助!代码如下:
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();
}
}
});
}
}